Intro

SQL 명령어를 정리한다.

명령어의 종류

SQL 명령문은 그 기능을 기준으로 DDL, DML, DCL, TCL 네 가지로 구분한다.

SQL문 종류 설명 명령어
DDL RDB의 구조를 정의 (생성, 변경, 삭제) CREATE, ALTER, DROP, RENAME, TRUNCATE
DML DDL로 정의된 DB(테이블)에서 데이터 입력, 수정, 삭제, 조회 INSERT, UPDATE, DELETE, SELECT
DCL 사용자에게 권한을 부여하거나 회수 GRANT, REVOKE
TCL 트랜잭션을 제어하는 명령어 COMMIT, ROLLBACK, SAVEPOINT

트랜잭션이란?
Transaction. DB 작업 처리 단위로, 큰 명령 실행을 위한 작은 연산 단위로 보면 된다.
원자성, 일관성, 고립성, 영속성이 있어야 한다.

잠깐! 먼저 볼 SQL 명령어

명령어 설명 예시
USE 데이터베이스명; 이후 해당 데이터베이스를 사용한다. USE test1;
DESC 테이블; 해당 테이블의 구조를 본다. DESC object; : 오브젝트 테이블의 구조 보기
select * from information_schema.table_constraints; 데이터베이스 내의 제약조건(PK, FK, 제약사항명 포함) 보기  

DDL

Data Definition Language
데이터베이스 개체(데이터베이스, 테이블, 뷰, 인덱스 등)의 생성, 수정, 삭제 등에 관여하는 명령어이다.

명령어

명령어 설명 함께 사용하는 구문
CREATE 데이터베이스 개체(데이터베이스, 테이블, 뷰, 인덱스 등)을 생성 DATABASE, TABLE…
ALTER 기존 데이터베이스의 개체에 대한 변경 TABLE, RENAME…
DROP 기존 데이터베이스 개체를 삭제 TABLE, DATABASE…
TRUNCATE    

CREATE

명령어 설명 함께 사용하는 구문 설명
CREATE DATABASE 데이터베이스 생성 DATABASE, TABLE…  
CREATE TABLE - 새로운 테이블을 생성
- 기본키, 외래키, 제약사항을 설정할 수 있다.
- 테이블명은 영어를 사용한다.
칼럼명 칼럼자료형 칼럼을 생성한다.
    CREATE TABLE 테이블명 (칼럼명 칼럼자료형 NOT NULL) NULL 값을 허용치 않는 칼럼을 생성한다.
    CREATE TABLE 테이블명 (칼럼생성, FOREIGN KEY 칼럼명 REFERENCES 부모테이블명(외래칼럼명) ON UPDATE 제약) 칼럼을 외래칼럼을 참조하는 foreign key로 사용. 원 칼럼의 내용이 바뀌면 제약사항을 따른다. ON UPDATE 구문은 생략할 수 있으며, 생략할 경우 RESTRICT와 동일하다.
    CREATE TABLE 테이블명 (칼럼생성, FOREIGN KEY 칼럼명 REFERENCES 부모테이블명(외래칼럼명) ON DELETE 제약) 칼럼을 외래칼럼을 참조하는 foreign key로 사용. 원 칼럼의 내용이 삭제되면 제약사항을 따른다. ON DELETE 구문은 생략할 수 있으며, 생략할 경우 RESTRICT와 동일하다.
    CREATE TABLE 테이블명 (칼럼생성 부) CHARACTER SET 캐릭터셋명 테이블의 캐릭터셋(문자그룹)을 지정한다.
CREATE VIEW 뷰 생성 AS SELECT, FROM  
CREATE USER DB에 접속하는 유저 계정 생성 IDENTIFIED BY CREATE USER ‘유저명’@’IP’ IDENTIFIED BY ‘비밀번호’
    IP : 특정 IP를 줄 수도 있고
XXX.XXX.XXX.* : 과 같이 특정 네트워크 그룹 전체에 계정을 줄 수도 있고
% 를 IP 부분에 넣으면 : 모든 IP에서 해당 계정을 사용할 수 있다.
 
제약사항 설명
CASCADE 참조하는 부모 테이블의 칼럼의 수정/삭제에 따라 수정/삭제 함께 된다.
SET NULL 참조하는 부모 테이블의 칼럼이 수정/삭제되면 이 칼럼의 값은 NULL이 된다.
RESTRICT 참조하는 부모 테이블의 칼럼의 수정 작업 자체를 거부함

ALTER

명령어 설명 함께 사용하는 구문 설명
ALTER TABLE - 생성된 테이블을 변경
- 칼럼 추가, 변경, 삭제 가능
- 기본키 설정, 외래키 설정 가능
ALTER TABLE 테이블명 RENAME TO 신규이름; 테이블명을 변경
    ALTER TABLE 테이블명 RENAME COLUMN 원칼럼명 TO 신칼럼명; 칼럼명 변경
    ALTER TABLE 테이블명 MODIFY COLUMN 칼럼명 자료형 제약사항 칼럼의 자료형, null 여부 등 제약사항을 변경
    ALTER TABLE 테이블명 DROP COLUMN 칼럼명 칼럼을 삭제
    ALTER TABLE 테이블명 DROP FOREIGN KEY 제약조건명 제약조건을 삭제. 제약조건명은 상단의 제약조건 확인 명령어 참고
    ALTER TABLE 테이블명 ADD  
    ALTER TABLE 테이블명 ADD FOREIGN KEY (칼럼명) REFERENCES 참조테이블명(참조칼럼명) 제약사항 기존 칼럼을 외래키로 만들기
    ALTER TABLE 테이블명 CONVERT TO CHARACTER SET 인코딩방법 테이블의 CHAR SET을 변경 (인코딩방법 변경이라고 보면 이해 편함)

DROP

명령어 설명 함께 사용하는 구문 설명
DROP TABLE - 테이블을 삭제
- 데이터 구조 뿐 아니라 저장 데이터도 모두 삭제됨
   

예시

예시 : 테이블 만들기 기본

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE DATABASE test1;
-- test1 이라는 이름의 데이터베이스를 생성한다.

USE DATABASE test1;
-- 이하에서 test1 데이터베이스를 사용한다. 

CREATE TABLE object(
    object_id   varchar(20) primary key,
    object_name varchar(20)
);
-- test1 데이터베이스 안에 object 라는 테이블을 만들고
-- 이 테이블에는 object_id 와 object_name 이라는 칼럼을 만든다.
-- object_id 는 가변길이 문자형이며, primary key 역할을 가진다.
-- object_name 은 가변길이 문자형이다.

예시 : 수정하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE user(
    user_id varchar(20) primary key,
    user_name varchar(20)
);
-- user 테이블을 만들고
-- user_id와 user_name 칼럼을 만들었다.
-- 하지만 나중에 칼럼 추가와 칼럼명 변경이 필요하여, 아래와 같은 명령문을 사용했다.

ALTER TABLE user RENAME COLUMN user_id TO user_uid;
-- user_id 칼럼의 이름을 user_uid 로 변경
-- uid : unique_id

ALTER TABLE user ADD (
    user_id varchar(20) not null,
    user_pw varchar(20) not null
    );
-- user_id와 user_pw 칼럼 추가

ALTER TABLE user MODIFY COLUMN user_name varchar(20) not null;


예시 : CHAR SET 변경

1
2
3
ALTER TABLE user CONVERT TO CHARACTER SET utf8;
-- user 테이블의 캐릭터셋(문자의 그룹)을 변경
-- 이를 통해 테이블이 한글을 수용할 수 있게 된다.

예시 : foreign key 설정

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE cam(
    cam_id varchar(20) primary key,
    user_uid varchar(20) not null,
    cam_name varchar(40) not null,
    cam_owner varchar(20) not null,
    loc_lat double,
    loc_long double,
    FOREIGN KEY (user_uid) REFERENCES user(user_uid) on update cascade
);
-- cam 테이블과 이러이러한 칼럼들을 만들고
-- user_id 칼럼은 user 테이블의 user_uid 칼럼을 foreign key로 삼는다.

예시 : 기존 칼럼에 foreign key 제약사항 추가

1
2
3
ALTER TABLE cam ADD FOREIGN KEY (cam_owner) REFERENCES user(user_name) ON UPDATE CASCADE;
-- cam 테이블의 cam_owner 칼럼이
-- user 테이블의 user_name을 참조하도록 함

DML

Data Multipulation Language
DDL이 개체에 대한 명령어라면 DML은 데이터 자체를 다루는 명령어이다.

명령어

명령어 설명 함께 사용되는 구문
SELECT 데이터를 검색하는 명령어 FROM, WHERE
INSERT 데이터를 삽입하는 명령어 INTO
UPDATE 데이터를 수정하는 명령어  
DELETE 데이터를 삭제하는 명령어  

SELECT

명령어 설명 함께 사용하는 구문 설명
SELECT * FROM information_schema.table_constraints; 데이터베이스에 있는 제약사항(PK, FK 포함) 보기    

INSERT

명령어 설명 함께 사용하는 구문 설명
INSERT INTO 테이블명(칼럼명1, 칼럼명2…) VALUES (값1, 값2 …) 데이터를 입력한다.    

REFERENCE

이기적 SQL 개발자 이론서+기출문제
http://www.tcpschool.com/mysql/mysql_constraint_foreignKey
https://araikuma.tistory.com/495
https://gocoder.tistory.com/2376
https://jhnyang.tistory.com/307
http://www.innodbcluster.com/?depth=13011702
https://zzdd1558.tistory.com/88
외래키 추가, 삭제, 확인 : https://velog.io/@iamcoder/Amazon-RDS-%ED%95%9C%EA%B8%80-%EC%84%A4%EC%A0%95
외래키 추가, 삭제, 확인 : https://allg.tistory.com/37
CHAR SET : https://dinn.github.io/dev%20tip/db-collation/