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

위 예시에서 titlepriority 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