2021-12-13 23:07 작성

My SQL basic 메모

Table of contents

MySQL INSERT multiple rows 구문

한 table에 복수의 rows를 집어 넣기 위해 다음 형태의 INSERT 구문을 사용할 수 있다:

INSERT INTO table_name (column_list)
VALUES
	(value_list_1),
	(value_list_2),
	...
	(value_list_n);


MySQL INSERT multiple rows limit

이론상, 하나의 INSERT 구문을 사용해서 어떤 수의 rows라도 집어 넣을 수 있다. 그러나 MySQL 서버가 max_allowed_packet보다 큰 용량의 INSERT 구문을 받게 될 때, 서버는 ‘packet too large’ 에러를 발생시키고 연결을 종료한다.

다음의 구문은 max_allowed_packet 변수의 최근 값을 보여준다:

SHOW VARIABLES LIKE 'max_allowed_packet';

output: 결과값은 각자의 서버마다 서로 다르다.

Variable_name Value
max_allowed_packet 67108864

Value column은 bytes 수를 의미한다.

max_allowed_packet 변수에 새로운 값을 설정하기 위해 다음의 구문을 사용한다:

SET GLOBAL max_allowed_packet=size;

size의 위치는 bytes에서 최대로 허용 가능한 packet 수를 나타내는 정수를 말한다.

max_allowed_packetINSERT INTO .. SELECT 구문에서는 영향력이 없다. INSERT INTO .. SELECT 구문은 원하는 만큼 많은 수의 rows를 집어 넣을 수 있다.



MySQL INSERT multiple rows 예시

INSERT multiple rows 구문을 사용한 예를 들어보자.

첫째, projects라는 이름의 새로운 table을 생성하자:

CREATE TABLE projects(
    project_id INT AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    start_date DATE,
    end_date DATE,
    PRIMARY KEY(project_id)
);

둘째, INSERT multiple rows 구문을 사용해서 projects table에 두 개의 rows를 삽입 하도록 하자:

INSERT INTO
    projects(name, start_date, end_date)
VALUES
	('AI for Marketing','2019-08-01','2019-12-31'),
	('ML for Sales','2019-05-15','2019-11-20');

MySQL은 다음의 메시지를 발생시킨다.

2 row(s) affected

다수의 rows를 삽입할 때 AUTO_INCREMENT column의 마지막 삽입 id를 얻는데 있어 LAST_INSERT_ID()를 사용한다. LAST_INSERT_ID()를 통해 여러 삽입 개수의 마지막 row id가 아닌 첫 번째로 삽입되는 row의 id를 얻을 수 있다.

SELECT LAST_INSERT_ID();