[ 데이터베이스 접속 ]
mysql -u [계정명] -p [DB명]
Enter password: [패스워드]
환경 변수의 path 항목에 MySQL Server 의 bin 폴더가 등록되어 있어야 한다!
(ex. C:\Program Files\MySQL\MySQL Server 8.0\bin)
명령프롬프트(CMD) 실행
MySQL 접속 명령 입력
기본 형식 : mysql [-h주소] -u계정명 -p[패스워드][데이터베이스명]
ex) mysql -uroot -p1234
=> 주의! -p 옵션 뒤에 패스워드를 직접 입력하면 노출의 위험이 발생하므로
-p 옵션명만 지정하고 엔터를 입력하여 별도의 패스워드 입력창에 패스워드를 입력하도록 하자!
ex) mysql -uroot -p
Enter password: ****
접속 성공 시
mysql> 프롬프트 표시됨
MySQL 접속 후 데이터베이스 선택 (단, 접속 시점에서 데이터베이스명을 입력했을 경우 불필요)
기본 형식 : use 데이터베이스명;
=> 주의! 지정된 데이터베이스가 생성되지 않았을 경우 오류 발생
Unknown database 'xxx' 메세지 출력됨
=> 접속 시점에서 데이터베이스 선택하는 방법
ex) mysql -uroot -p study_jsp
=========================================================================
[ 데이터베이스 조회 ]
SHOW DATABASES;
[ 데이터베이스 생성 ]
CREATE DATABASE study_jsp2;
[ 데이터베이스 삭제 ]
DROP DATABASE study_jsp2;
[ 데이터베이스 선택 ]
[ 테이블 생성 ]
CREATE TABLE 테이블명 (
컬럼명1 데이터타입1 [제약조건...],
컬럼명n 데이터타입n [제약조건...]
);
< 테이블 생성 시 컬럼 데이터타입 종류 >
1) 숫자 : INT, FLOAT, DOUBLE 등
2) 문자 : CHAR(저장공간 고정), VARCHAR(저장공간이 문자 길이에 따라 가변적)
3) 날짜 : DATE, TIMESTAMP
등등...
CREATE TABLE test (
idx INT,
name VARCHAR(10)
);
CREATE TABLE test (
idx INT PRIMARY KEY,
name VARCHAR(10) NOT NULL
);
< 테이블 생성 연습 - test2 >
1. 번호(idx) - 정수
2. 이름(name) - 문자(20글자)
3. 아이디(id) - 문자(16글자)
4. 패스워드(passwd) - 문자(32글자)
CREATE TABLE test2 (
idx INT,
name VARCHAR(20),
id VARCHAR(16),
passwd VARCHAR(32)
);
< 테이블 생성 연습 - test3 >
1. 번호(idx) - 정수 => PK 제약조건 설정
2. 이름(name) - 문자(20글자) => NN(Not NULL) 제약 조건 설정
3. 아이디(id) - 문자(16글자) => NN(Not NULL), Unique 제약 조건 설정
4. 패스워드(passwd) - 문자(32글자) => NN(Not NULL) 제약 조건 설정
CREATE TABLE test3 (
idx INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
id VARCHAR(16) NOT NULL UNIQUE,
passwd VARCHAR(32) NOT NULL
);
[ 테이블 목록 조회 ]
SHOW TABLES;
[ 테이블 구조 조회 ]
DESC 테이블명;
[ 테이블 삭제 ]
[ 레코드 추가(INSERT) ]
INSERT INTO 테이블명[(컬럼명1, ..., 컬럼명n)]
VALUES (데이터1, ..., 데이터n);
=> 주의! 문자 데이터의 경우 작은따옴표('') 를 사용해야함
INSERT INTO test(idx) VALUES (1);
INSERT INTO test(name) VALUES ('홍길동');
INSERT INTO test(idx, name) VALUES (2, '이순신');
// 만약, test 테이블의 모든 컬럼(idx, name) 데이터를 모두 추가할 경우
// 별도의 컬럼명 지정 없이 테이블명 뒤에 VALUES (데이터...) 사용 가능
INSERT INTO test VALUES (3, '강감찬');
// 주의!
INSERT INTO test VALUES (1); // 오류 발생(컬럼갯수와 데이터 갯수 불일치)
(ERROR 1136 (21S01): Column count doesn't match value count at row 1)
< 레코드 추가 연습 >
test2 테이블에 다음의 데이터 추가
번호(idx) : 1, 이름(name) : 홍길동, 아이디(id) : hong, 패스워드(passwd) : hong123
번호(idx) : 2, 이름(name) : 이순신, 아이디(id) : leess, 패스워드(passwd) : leess123
번호(idx) : 3, 이름(name) : 강감찬, 아이디(id) : 없음, 패스워드(passwd) : 없음
번호(idx) : 1, 이름(name) : 홍길동, 아이디(id) : hong, 패스워드(passwd) : hong123
INSERT INTO test2 VALUES(1,'홍길동','hong','hong123');
INSERT INTO test2 VALUES(2,'이순신','leess','leess123');
INSERT INTO test2 VALUES(3,'강감찬',null,null);
// 또는 INSERT INTO test2(idx, name) VALUES(3,'강감찬');
INSERT INTO test2 VALUES(1,'홍길동','hong','hong123');
INSERT INTO test3 VALUES(1,'홍길동','hong','hong123');
INSERT INTO test3 VALUES(2,'이순신','leess','leess123');
INSERT INTO test3 VALUES(3,'강감찬',null,null);
INSERT INTO test3(idx,name) VALUES(3,'강감찬');
INSERT INTO test3 VALUES(1,'홍길동','hong','hong123');
[ 레코드 조회(SELECT) ]
SELECT [컬럼명1, ..., 컬럼명n 또는 *]
FROM 테이블명
[WHERE 조건식];
SELECT * FROM test; // 모든 컬럼 데이터 조회
SELECT name FROM test; // name 컬럼 데이터만 조회
SELECT name, idx FROM test; // name 컬럼, idx 컬럼 순으로 조회
< WHERE 절 사용 >
SELECT FROM test WHERE idx >= 2; // test 테이블의 모든 컬럼 중 idx 가 2 이상인 레코드 조회
SELECT FROM test WHERE name = '이순신'; // test 테이블에서 name 이 '이순신' 인 레코드 조회
// 이름(name) 이 '이순신' 인 레코드의 번호(idx) 조회
SELECT idx FROM test WHERE name = '이순신';
[ 레코드 수정(UPDATE) ]
UPDATE 테이블명
SET 변경할컬럼명1=변경할데이터1, ..., 변경할컬럼명n=변경할데이터n
[WHERE 조건식];
=> 주의! UPDATE 구문 사용 시 WHERE 절을 생략할 경우 지정된 테이블의 모든 데이터가 주어진 데이터로 변경됨
이름(name)이 '이순신' 인 레코드의 패스워드(passwd) 컬럼값을 'lee123' 으로 변경하기
=> UPDATE test3 SET passwd='lee123';
주의! test3 테이블의 모든 passwd 값이 'lee123' 으로 변경됨
mysql> UPDATE test3 SET passwd='lee123';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
=> 2개 행 일치하고, 2개 행 변경되었다는 의미
=> UPDATE test3 SET passwd='lee123' WHERE name='이순신';
Rows matched: 1 Changed: 1 Warnings: 0 (1개 행 일치, 1개 행 변경)
[ 레코드 삭제(DELETE) ]
DELETE FROM 테이블명
[WHERE 조건식];
=> 주의! DELETE 구문 사용 시 WHERE 절을 생략할 경우 지정된 테이블의 모든 레코드가 삭제됨
id 가 leess 인 레코드 삭제하기
DELETE FROM test3 WHERE id='leess';
Query OK, 1 row affected (0.01 sec) => 일치하는 1개 레코드 삭제 완료
Query OK, 0 row affected (0.01 sec) => 일치하는 레코드가 없으므로 삭제 불가
id 가 hong 이고 name 이 홍길동인 레코드 삭제
DELETE FROM test3 WHERE id='hong' AND name='홍길동';
========================================================================
< 테이블 생성 연습 >
학생 정보를 저장할 student 테이블 생성
1) 컬럼명 : idx, 컬럼타입 : 정수(INT)
2) 컬럼명 : no, 컬럼타입 : 정수(INT)
3) 컬럼명 : name, 컬럼타입 : 문자(16자)
CREATE TABLE student (
idx INT,
no INT,
name VARCHAR(16)
);
< student 테이블 구조 확인 >
DESC student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| idx | int | YES | | NULL | |
| no | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
< student 테이블 레코드 추가 >
번호(idx) - 1, 학번(no) - 20211111, 이름(name) - 홍길동
=> INSERT INTO student VALUES (1, 20211111, '홍길동');
Query OK, 1 row affected (0.01 sec) => 1개 레코드 추가 완료
< student 테이블 조회 >
SELECT * FROM student;
+------+----------+--------+
| idx | no | name |
+------+----------+--------+
| 1 | 20211111 | 홍길동 |
+------+----------+--------+
============================================================================
[ 테이블 수정 - ALTER ]
1. 필드(컬럼) 추가
ALTER TABLE 테이블명 ADD [COLUMN] 추가할컬럼명 컬럼타입;
1-1) student 테이블에 DATE 타입 reg_date 컬럼 추가
=> ALTER TABLE student ADD reg_date DATE;
1-2) student 테이블에 이메일주소를 저장하는 50자리 email 컬럼 추가
=> ALTER TABLE student ADD email VARCHAR(50);
DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| idx | int | YES | | NULL | |
| no | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| reg_date | date | YES | | NULL | | => 새로 추가된 컬럼
| email | varchar(50) | YES | | NULL | | => 새로 추가된 컬럼
+----------+-------------+------+-----+---------+-------+
+------+----------+--------+----------+-------+
| idx | no | name | reg_date | email |
+------+----------+--------+----------+-------+
| 1 | 20211111 | 홍길동 | NULL | NULL | => 새로 추가된 컬럼에 NULL 값 저장됨
+------+----------+--------+----------+-------+
DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| idx | int | YES | | NULL | |
| no | varchar(8) | YES | | NULL | | => 타입이 변경된 컬럼
| name | varchar(16) | YES | | NULL | |
| reg_date | date | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
필드(컬럼) 삭제
ALTER TABLE 테이블 DROP [COLUMN] 제거할컬럼명;
=> ALTER TABLE student DROP reg_date;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| idx | int | YES | | NULL | |
| student_no | int | YES | | NULL | |
| name | varchar(16) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
테이블 이름 변경
ALTER TABLE 테이블명 RENAME 변경할테이블명;
=> ALTER TABLE student RENAME itwill_student;
SHOW TABLES;
+----------------------+
| Tables_in_study_jsp2 |
+----------------------+
| itwill_student | => 이름이 변경된 테이블(기존 이름 : student)
| test |
| test2 |
+----------------------+