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/