프로그래밍 언어/Database

SQLite 데이터베이스에 한 번에 여러 행을 삽입 하는 방법

Rateye 2021. 7. 7. 10:21
728x90
반응형

 

질문 : SQLite 데이터베이스에 한 번에 여러 행을 삽입 할 수 있습니까?

MySQL에서는 다음과 같이 여러 행을 삽입 할 수 있습니다.

INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2');

그러나 이와 같은 작업을 시도하면 오류가 발생합니다. SQLite 데이터베이스에 한 번에 여러 행을 삽입 할 수 있습니까? 이를 수행하는 구문은 무엇입니까?

답변

BrianCampbell이 여기 에서 지적했듯이 SQLite 3.7.11 이상은 이제 원본 게시물의 더 간단한 구문을 지원합니다 . 그러나 표시된 접근 방식은 레거시 데이터베이스에서 최대 호환성을 원하는 경우 여전히 적합합니다.

권한이 있다면 강의 답장 을 던질 것입니다. SQLite에 여러 행을 삽입 할 수 있으며 다른 구문이 필요합니다. 완벽하게 명확하게하기 위해 OPs MySQL 예제 :

INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2');

이것은 다음과 같이 SQLite로 다시 캐스팅 될 수 있습니다.

     INSERT INTO 'tablename'
          SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2

저는 원래이 기술을 사용하여 Ruby on Rails에서 대규모 데이터 세트를 효율적으로로드했습니다. 그러나 Jaime Cook이 지적했듯이 이것이 단일 트랜잭션 내에서 INSERTs 더 빠르게 래핑하는 것이 분명하지 않습니다.

BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;

효율성이 목표라면 이것을 먼저 시도해야합니다.

여러 사람이 언급했듯이 UNION ALL 을 사용하면 (위와 같이) 모든 행이 삽입 data1, data2 의 4 개 행을 얻게됩니다. ALL 을 생략하면 중복 행이 제거되고 작업이 약간 느려질 수 있습니다. UNION ALL은 원본 게시물의 의미와 더 가깝기 때문에 사용하고 있습니다.

 

출처 : https://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-a-time-in-an-sqlite-database
728x90
반응형