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_packet
은 INSERT 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();