1. 기존 DB에 있는 값들을 바탕으로 여러 인스턴스들을 한 번에 삽입하고 싶을 때
INSERT INTO (필드값1, 필드값2, ...) SELECT col1, col2, ... FROM ... WHERE ...
INSERT INTO 뒤에 그냥 SELECT문으로 시작하여 삽입을 원하는 값들을 테이블로 만들어주면 된다!
그림 1대로 하지말고, 그림 2처럼 하면 된다.
2. insert into 자체를 정말 여러 개(수 백개 수준) 넣어야할 때
뭔가 초기값을 수백개 수준으로 넣고 싶다면 (위에서 그림 1대로 하고 싶다면), 열편집 기능을 사용한다.
1. 정제되지 않은 데이터를 메모장에 붙여넣는다. (뒤에서 notepad ++ 프로그램 사용할 것임)
2. 전체 복사해서 엑셀에 붙여넣고, 데이터 -> 텍스트 나누기 -> '쉼표'로 나눈다.
3. 나눠진 데이터에 필요한 부분만 엑셀을 이용하여 빠르게 변환한다. 변환된 테이블을 복사하여 notepad++에 다시 붙여 넣는다.
4. (엑셀이나 intelliJ 에서 바로 처리해도 되겠지만) 'Alt + 마우스 드래그 ' 또는 'Alt + 방향키'로 여러 컬럼을 선택하여 중간중간에 ,를 넣어준다.
이렇게 넣고 한번에 실행하면, insert 되는 동안 DB에 lock이 걸릴 수 있으니 유의해야한다.
혹시 모르니 트랜잭션을 Auto commit이 아니라 Mannual commit으로 바꿔놓는 것도 잊지말자..
3. 많은 데이터를 한 번에 넣고 싶을 때
BULK INSERT 문법을 사용한다. RDBMS마다 문법이 약간씩 다르고, Cloud를 이용하는 경우 .csv나 .txt 파일을 로컬에서 읽어올 수 있는게 아니라 클라우드에서 제공하는 기능을 바탕으로 인증을 거쳐서 넣어야할 수도 있다.
소스가 많으니 검색해서 학습해야한다.
Microsoft Azure의 경우 Blob Storage에 파일을 올리고, 해당 파일을 불러와야 한다. 아래 링크 참조
SQL Server guides - Bulk loading data to Azure SQL -
https://sqlserverguides.com/bulk-loading-data-to-azure-sql/
목차 중 Bulk insert from Azure blob storage to Azure SQL database 부분을 참고하면 됨
'Programming-[Backend] > SQL' 카테고리의 다른 글
[SQLD] 9. SQL 기본 5 - WITH, GRANT, SAVEPOINT, HASH JOIN, INTERSECT, CROSS JOIN (0) | 2022.05.18 |
---|---|
[SQLD] 8. SQL 기본 4 - NULL, 형변환, 내장형 함수, ROWNUM/ROWID (0) | 2022.05.17 |
[SQLD] 7. SQL 기본 3 - 데이터베이스 로그, TRUNCATE, Order by와 index 힌트, like문 underscore (0) | 2022.05.15 |
[SQLD] 6. SQL 기본 2 - CASCADE, 테이블-컬럼 변경, 뷰(VIEW) (0) | 2022.05.14 |
[SQLD] 5. SQL 기본 1 - 관계형 데이터베이스, 기본 용어, SQL 종류, 실행순서 (0) | 2022.05.14 |