2021-12-13 19:58 작성
My SQL basic 메모
Table of contents
MySQL INSERT 구문 도입
INSERT
구문은 하나 혹은 그 이상의 rows를 table 안에 넣을 수 있게 한다. 다음은 INSERT
를 사용하는 기본 문법이다:
INSERT INTO table(c1,c2,...)
VALUES (v1,v2,...);
이 문법에서,
- 첫째,
INSERT INTO
절 다음에 table name을 명시하고 괄호 안에 콤마로 구분 지어진 columns의 list를 명시한다. - 그리고
VALUES
키워드를 따라 괄호 안에 상응하는 columns의 values를 집어 넣는데 이 때, 콤마로 구분 지어진 list를 집어 넣는다.
columns와 values의 수는 같아야 한다. 뿐만 아니라 columns의 위치(positions)는 values의 위치와 대응되어야 한다.
하나의 INSERT
구문을 이용해 한 table 안에 다수의 rows를 집어 넣기위해 다음의 문법을 사용한다:
INSERT INTO table(c1,c2,...)
VALUES
(v11,v12,...),
(v21,v22,...),
...
(vnn,vn2,...);
이 문법에서 rows는 VALUES
절에서 콤마로 구분됐다.
MySQL INSERT 예시
INSERT
구문을 연습하기 위해 tasks
로 이름 지어진 새로운 table을 생성해보자.
CREATE TABLE IF NOT EXISTS tasks (
task_id INT AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
start_date DATE,
due_date DATE,
priority TINYINT NOT NULL DEFAULT 3,
description TEXT,
PRIMARY KEY (task_id)
);
1) MySQL INSERT - 간단한 INSERT 예시
다음의 구문은 tasks
table에 하나의 새로운 row를 집어 넣는다:
INSERT INTO tasks(title, priority)
VALUES('Learn MySQL INSERT Statement',1);
MySQL은 다음의 메시지를 반환한다:
Query OK, 1 row affected (0.01 sec)
한 개의 row를 tasks
table에 성공적으로 집어 넣었다는 의미다.
다음의 쿼리는 tasks
table의 데이터를 반환한다:
SELECT * FROM tasks;
output:
task_id | title | start_date | due_date | priority | description |
---|---|---|---|---|---|
1 | Learn MySQL INSERT Statement | NULL | NULL | 1 | NULL |
위 예시에서 title
과 priority
columns의 values를 명시했다. 다른 columns에서 MySQL은 default values를 사용한다.
task_id
column은 AUTO_INCREMENT
다. MySQL은 특정 table 안에 한 개의 row가 들어가면 순차적으로 정수를 발생시킨다.
start_date
, due_date
그리고 description
columns는 default value로 NULL
을 사용한다. 그래서 MySQL은 INSERT
구문에서 직전에 명시한 columns에 값을 지정하지 않는 경우 NULL
을 집어 넣는다.
2) MySQL INSERT - default value를 이용해 rows 집어 넣기 에시
만약 default value(기본값)를 집어 넣기를 원한다면 두 가지 방법이 있다:
INSERT
구문에서 column name과 value를 무시한다.INSERT INTO
절에서 column name을 명시하고VALUES
절에서DEFAULT
키워드를 사용한다.
다음의 예시는 두 번째 방법을 증명한다:
INSERT INTO tasks(title, priority)
VALUES('Understanding DEFAULT keyword in INSERT statement', DEFAULT);
priority
column의 default value는 생성 당시 3으로 지정되었기 때문이다:
priority TINYINT NOT NULL DEFAULT 3
MySQL은 priority
column에 숫자 3을 집어넣는다.
다음의 구문은 집어 넣기 이후 tasks
table의 내용을 반환한다.
SELECT * FROM tasks;
output:
task_id | title | start_date | due_date | priority | description |
---|---|---|---|---|---|
1 | Learn MySQL INSERT Statement | NULL | NULL | 1 | NULL |
2 | Understanding DEFAULT keyword in INSERT statement | NULL | NULL | 3 | NULL |
3) MySQL INSERT - table에 dates(날짜) 집어넣기 예시
한 column 안에 문자 date value를 집어 넣기 위해 다음의 포맷을 사용한다:
'YYYY-MM-DD'
이 포맷에서:
YYYY
는 4개의 숫자로 이루어진(four-digit) 연도를 나타낸다. e.g. 2018.MM
은 2개의 숫자로 이루어진 (two-digit) 달을 나타낸다. e.g. 01,02 그리고 12.DD
는 2개의 숫자로 이루어진 일을 나타낸다. e.g. 01, 02, 30.
다음의 구문은 tasks
table에 하나의 새로운 row로 start 그리고 due date values를 집어 넣는다:
INSERT INTO tasks(title, start_date, due_date)
VALUES('Insert date into table', '2018-01-09', '2018-09-15');
output:
task_id | title | start_date | due_date | priority | description |
---|---|---|---|---|---|
1 | Learn MySQL INSERT Statement | NULL | NULL | 1 | NULL |
2 | Understanding DEFAULT keyword in INSERT statement | NULL | NULL | 3 | NULL |
3 | Insert date into table | 2018-01-09 | 2018-09-15 | 3 | NULL |
VALUES
절 안에 expressions를 사용하는 것도 가능하다. 예를 들어 다음의 구문은 최근 날짜를 start date와 due date columns에 집어넣어 새로운 task를 추가한다.
INSERT INTO tasks(title, start_date, due_date)
VALUES('Use current date for the task', CURRENT_DATE(), CURRENT_DATE());
output:
task_id | title | start_date | due_date | priority | description |
---|---|---|---|---|---|
1 | Learn MySQL INSERT Statement | NULL | NULL | 1 | NULL |
2 | Understanding DEFAULT keyword in INSERT statement | NULL | NULL | 3 | NULL |
3 | Insert date into table | 2018-01-09 | 2018-09-15 | 3 | NULL |
4 | Use current date for the task | 2021-12-13 | 2021-12-13 | 3 | NULL |
4) MySQL INSERT - 복수의 rows 집어넣기 예시
다음의 구문은 tasks
table에 세 개의 rows를 집어 넣는다:
INSERT INTO tasks(title, priority)
VALUES
('My first task', 1),
('It is the second task',2),
('This is the third task of the week',3);
작업이 성공하면 다음과 같은 메시지를 출력한다:
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
SELECT * FROM tasks;
output:
task_id | title | start_date | due_date | priority | description |
---|---|---|---|---|---|
1 | Learn MySQL INSERT Statement | NULL | NULL | 1 | NULL |
2 | Understanding DEFAULT keyword in INSERT statement | NULL | NULL | 3 | NULL |
3 | Insert date into table | 2018-01-09 | 2018-09-15 | 3 | NULL |
4 | Use current date for the task | 2021-12-13 | 2021-12-13 | 3 | NULL |
5 | My first task | NULL | NULL | 1 | NULL |
6 | It is the second task | NULL | NULL | 2 | NULL |
7 | This is the third task of the week | NULL | NULL | 3 | NULL |