삽입(SQL)
Insert (SQL)SQL INSERT 문은 관계형 데이터베이스의 단일 테이블에 하나 이상의 레코드를 추가한다.null
기본형식
삽입 문장의 형식은 다음과 같다.
INSERT INTER 테이블(열1 [, 열2, 열3 ... ]) 값(값1 [, 값2, 값3 ... ])
열과 값의 수는 같아야 한다.열을 지정하지 않으면 열의 기본값이 사용된다.에 의해 지정된 값(또는 암시된 값)INSERT 문은 모든 적용 가능한 제약 조건(예: 기본 키, CHECK 제약 조건 및 NULL 제약 조건 아님)을 충족해야 한다.구문 오류가 발생하거나 제약 조건을 위반하면 새 행이 테이블에 추가되지 않고 오류가 반환된다.null
예:
삽입 INO phone_book (이름을 붙이다, 번호를 붙이다) 가치 ('존 도', '555-1212');
테이블이 만들어졌을 때 기둥의 순서를 이용하여 속기도 사용할 수 있다.다른 열은 기본값으로 설정되거나 null로 유지되므로 표의 모든 열을 지정할 필요는 없다.
표 값에 삽입(값1, [값2, ... ])
phone_book 테이블의 두 열에 데이터를 삽입하고 테이블의 처음 두 열 뒤에 있을 수 있는 다른 열을 무시하는 예.null
삽입 INO phone_book 가치 ('존 도', '555-1212');
고급 양식
멀티로 인서트
SQL 기능(SQL-92 이후)은 행 값 생성자를 사용하여 한 번에 여러 행을 단일 SQL 문에 삽입하는 것이다.
삽입 INO 탭 이름 (칼럼을 세우다-a, [칼럼을 세우다-b, ...]) 가치 ('값-1a', ['값-1b', ...]), ('값-2a', ['값-2b', ...]), ...
이 기능은 DB2, SQL Server (버전 10.0 - 즉 2008년 이후), PostgreSQL (버전 8.2 이후), MySQL, SQLite (버전 3.7.11 이후) 및 H2에서 지원된다.null
예('phone_book' 표의 열만 'name'과 'number'라고 가정할 경우):null
삽입 INO phone_book 가치 ('존 도', '555-1212'), ('피터 도', '555-2323');
두 진술의 속기라고 볼 수 있는 것
삽입 INO phone_book 가치 ('존 도', '555-1212'); 삽입 INO phone_book 가치 ('피터 도', '555-2323');
두 개의 별도 문장은 서로 다른 의미론(특히 문 트리거에 관한)을 가질 수 있으며 단일 다중 행 삽입과 동일한 성능을 제공하지 않을 수 있다는 점에 유의하십시오.null
MS SQL에 여러 행을 삽입하려면 다음과 같은 구성을 사용하십시오.
삽입 INO phone_book 선택 '존 도', '555-1212' 유니온 모두 선택 '피터 도', '555-2323';
불완전한 하위 선택 조항으로 인해 SQL 표준(SQL:2003)에 따른 유효한 SQL 문이 아니라는 점에 유의하십시오.null
Oracle에서 동일한 작업을 수행하려면 항상 단일 행으로만 구성된 DUAL 테이블을 사용하십시오.
삽입 INO phone_book 선택 '존 도', '555-1212' From 듀얼 유니온 모두 선택 '피터 도','555-2323' From 듀얼
이 논리의 표준적합성 구현은 다음과 같은 예 또는 위와 같다.
삽입 INO phone_book 선택 '존 도', '555-1212' From 측면 ( 가치 (1) ) AS t(c) 유니온 모두 선택 '피터 도','555-2323' From 측면 ( 가치 (1) ) AS t(c)
Oracle PL/SQL은 여러 삽입 문이 SELECT에 의해 종료되는 INSERT ALL 문을 지원한다.[1]
삽입 모두 INO phone_book 가치 ('존 도', '555-1212') INO phone_book 가치 ('피터 도', '555-2323') 선택 * From 듀얼;
Firebird에서는 다음과 같이 여러 행을 삽입할 수 있다.
삽입 INO phone_book (이름을 붙이다, 번호를 붙이다) 선택 '존 도', '555-1212' From RDB$DATABASE 유니온 모두 선택 '피터 도', '555-2323' From RDB$DATABASE;
그러나 파이어버드는 단일 질의에 사용할 수 있는 컨텍스트 수에는 한계가 있기 때문에 이런 식으로 삽입할 수 있는 것보다 행 수를 제한한다.null
다른 테이블에서 행 복사
INSERT 문장은 다른 테이블에서 데이터를 검색하고, 필요한 경우 수정하고, 테이블에 직접 삽입하는 데도 사용할 수 있다.이 모든 것은 클라이언트 애플리케이션의 중간 처리를 포함하지 않는 단일 SQL 문에서 이루어진다.VALUES 절 대신 하위 선택이 사용된다.하위 선택에는 조인, 함수 호출이 포함될 수 있으며, 데이터가 삽입된 동일한 테이블을 쿼리할 수도 있다.논리적으로 실제 삽입 작업이 시작되기 전에 선택 항목을 평가한다.예를 들면 다음과 같다.null
삽입 INO phone_book2 선택 * From phone_book 어디에 이름을 붙이다 인 ('존 도', '피터 도')
소스 테이블의 일부 데이터를 새 테이블로 삽입할 때는 변화가 필요하지만 전체 레코드가 아닌 경우(또는 테이블의 스키마가 동일하지 않을 경우)null
삽입 INO phone_book2 (이름을 붙이다, 번호를 붙이다) 선택 이름을 붙이다, 번호를 붙이다 From phone_book 어디에 이름을 붙이다 인 ('존 도', '피터 도')
SELECT 문은 (임시) 테이블을 생성하며, 해당 임시 테이블의 스키마는 데이터가 삽입된 테이블의 스키마와 일치해야 한다.null
기본값
모든 열의 기본값을 사용하여 데이터를 지정하지 않고 새 행을 삽입할 수 있다.그러나 일부 데이터베이스는 Microsoft SQL Server와 같이 데이터가 제공되지 않으면 이 문을 거부하며, 이 경우 DEFAULT 키워드를 사용할 수 있다.null
삽입 INO phone_book 가치 ( 체납 )
때때로 데이터베이스는 이에 대한 대체 구문도 지원한다. 예를 들어, MySQL은 기본 키워드를 생략하고 T-SQL은 VALUES(DEFAULES) 대신 기본값을 사용할 수 있다.또한 DEFAULT 키워드를 일반 삽입 시 사용하여 해당 열의 기본값을 사용하여 열을 명시적으로 채울 수 있다.
삽입 INO phone_book 가치 ( 체납, '555-1212' )
열이 기본값을 지정하지 않을 때 발생하는 동작은 데이터베이스에 의존한다.예를 들어 MySQL과 SQLite는 엄격한 모드에 있는 경우를 제외하고 빈 값으로 채워지며, 다른 많은 데이터베이스는 이 문을 거부한다.null
키 검색 중
모든 테이블의 기본 키로 대체 키를 사용하는 데이터베이스 설계자는 다른 SQL 문에 사용하기 위해 SQL INSERT 문에서 데이터베이스 생성 기본 키를 자동으로 검색해야 하는 시나리오에 직면하게 된다.대부분의 시스템은 SQL INSERT 문이 행 데이터를 반환하는 것을 허용하지 않는다.따라서 그러한 시나리오에서 해결 방법을 구현할 필요가 있다.일반적인 구현에는 다음이 포함된다.
- 대체 키를 생성하고 INSERT 작업을 수행한 후 생성된 키를 최종적으로 반환하는 데이터베이스별 저장 프로시저를 사용하십시오.예를 들어 Microsoft SQL Server에서는 특수 함수를 통해 키를 검색하고 SQLite에서는 함수의 이름을 last_insert_rowid()로 지정한다.
- 마지막으로 삽입된 행이 포함된 임시 테이블에서 데이터베이스별 선택 문 사용.DB2는 다음과 같은 방법으로 이 기능을 구현한다.
선택 * From 새로운 테이블 ( 삽입 INO phone_book 가치 ( '피터 도','555-2323' ) ) AS t
- DB2 for z/OS는 다음과 같은 방법으로 이 기능을 구현한다.null
선택 EMPNO, 렌트타입, 렌터카이트 From 최종 테이블 ( 삽입 INO EMPSAMP (이름, 급여, 뎁트노, 레벨) 가치('메리 스미스', 35000.00, 11, '어소시에이트') );
- 가장 최근에 삽입된 행에 대해 생성된 기본 키를 반환하는 데이터베이스별 함수와 함께 INSERT 문 뒤에 SELECT 문 사용.예를 들어 MySQL의 경우 LAST_INSERT_ID()를 참조하십시오.
- 후속 SELECT 문에서 원본 SQL INSERT의 고유한 요소 조합 사용.
- SQL INSERT 문에서 GUID를 사용하고 SELECT 문에서 검색.
- MS-SQL Server 2005 및 MS-SQL Server 2008에 대한 SQL INSERT 문의 OUTPUT 절 사용.
- Oracle의 RETURING 절과 함께 INSERT 문 사용.null
삽입 INO phone_book 가치 ( '피터 도','555-2323' ) 돌아오는 phone_book_id INO v_pb_id
- PostgreSQL에 대한 RETURING 절과 함께 INSERT 문 사용(8.2 이후)반환된 목록은 INSERT의 결과와 동일하다.null
- H2의 IDENTY() 함수를 사용하면 마지막으로 삽입된 ID가 반환된다.null
선택 아이덴티티();
트리거스
INSERT 문이 작동하는 테이블에 트리거가 정의되어 있는 경우, 그러한 트리거는 작동의 맥락에서 평가된다.INTERT 트리거를 실행하기 전에 표에 삽입해야 하는 값을 수정할 수 있다.AFTER INSERT 트리거는 더 이상 데이터를 수정할 수 없지만, 예를 들어 감사 메커니즘을 구현하기 위한 다른 테이블의 작업을 시작하는 데 사용할 수 있다.null
참조
- ^ "Oracle PL/SQL: INSERT ALL". psoug.org. Retrieved 2010-09-02.
- ^ "Firebird 2.5 Language Reference Update". Retrieved 2011-10-24.
- ^ "Firebird SQL Language Dictionary".