MySQL 기초

Mia Lee·2021년 12월 20일
0

JSP

목록 보기
14/22

[ 데이터베이스 접속 ]
mysql -u [계정명] -p [DB명]
Enter password: [패스워드]

  1. 환경 변수의 path 항목에 MySQL Server 의 bin 폴더가 등록되어 있어야 한다!
    (ex. C:\Program Files\MySQL\MySQL Server 8.0\bin)

  2. 명령프롬프트(CMD) 실행

  3. MySQL 접속 명령 입력
    기본 형식 : mysql [-h주소] -u계정명 -p[패스워드][데이터베이스명]
    ex) mysql -uroot -p1234
    => 주의! -p 옵션 뒤에 패스워드를 직접 입력하면 노출의 위험이 발생하므로
    -p 옵션명만 지정하고 엔터를 입력하여 별도의 패스워드 입력창에 패스워드를 입력하도록 하자!
    ex) mysql -uroot -p
    Enter password: ****

    접속 성공 시
    mysql> 프롬프트 표시됨

  4. MySQL 접속 후 데이터베이스 선택 (단, 접속 시점에서 데이터베이스명을 입력했을 경우 불필요)
    기본 형식 : use 데이터베이스명;
    => 주의! 지정된 데이터베이스가 생성되지 않았을 경우 오류 발생
    Unknown database 'xxx' 메세지 출력됨
    => 접속 시점에서 데이터베이스 선택하는 방법
    ex) mysql -uroot -p study_jsp

=========================================================================
[ 데이터베이스 조회 ]
SHOW DATABASES;

[ 데이터베이스 생성 ]
CREATE DATABASE study_jsp2;

[ 데이터베이스 삭제 ]
DROP DATABASE study_jsp2;

[ 데이터베이스 선택 ]

USE 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 테이블명;

[ 테이블 삭제 ]

DROP TABLE 테이블명;

[ 레코드 추가(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 컬럼 순으로 조회

SELECT idx AS '번호', name AS '이름' FROM test; // 컬럼명을 다른 이름으로 바꿔서 조회

< 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 값 저장됨
+------+----------+--------+----------+-------+

  1. 필드 타입 변경
    ALTER TABLE 테이블명 MODIFY [COLUMN] 컬럼명 변경할컬럼타입;
    => ALTER TABLE student MODIFY no VARCHAR(8);

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 | |
+----------+-------------+------+-----+---------+-------+

  1. 필드(컬럼)명 및 타입 변경
    ALTER TABLE 테이블명 CHANGE [COLUMN] 기존컬럼명 새컬럼명 새컬럼타입;
    (만약, 컬럼명만 변경하고 타입은 유지하고 싶을 경우
    ALTER TABLE student CHANGE no student_no VARCHAR(8);
    => 기존 타입이 VARCHAR(8) 일 때 이름만 변경하는 경우
    ALTER TABLE student CHANGE no student_no INT;
    => 기존 타입이 VARCHAR(8) 일 때 이름과 타입을 모두 변경하는 경우
    +------------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +------------+-------------+------+-----+---------+-------+
    | idx | int | YES | | NULL | |
    | student_no | int | YES | | NULL | | => 이름과 타입이 변경된 컬럼
    | name | varchar(16) | YES | | NULL | |
    | reg_date | date | YES | | NULL | |
    | email | varchar(50) | YES | | NULL | |
    +------------+-------------+------+-----+---------+-------+
  1. 필드(컬럼) 삭제
    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 | |
    +------------+-------------+------+-----+---------+-------+

  2. 테이블 이름 변경
    ALTER TABLE 테이블명 RENAME 변경할테이블명;
    => ALTER TABLE student RENAME itwill_student;

SHOW TABLES;
+----------------------+
| Tables_in_study_jsp2 |
+----------------------+
| itwill_student | => 이름이 변경된 테이블(기존 이름 : student)
| test |
| test2 |
+----------------------+

0개의 댓글