programing

1개의 INSERT에 여러 행의 ID를 삽입하려면 어떻게 해야 합니까?

copysource 2022. 10. 21. 22:17
반응형

1개의 INSERT에 여러 행의 ID를 삽입하려면 어떻게 해야 합니까?

하나의 테이블을 사용하여 여러 행을 삽입하고 싶다.INSERT진술.SQL은 하나의 파라미터로 여러 행을 제공하는 옵션을 제공하므로 문제 없습니다.INSERT진술.이 행에는 다음 행이 포함되어 있습니다.ID필드의 값은 내 코드가 아닌 데이터베이스에 의해 설정됩니다.

그 결과, 저는 그 제품을 구입하고 싶습니다.ID삽입된 행의 값.기본적인 질문은 다음과 같습니다.MariaDB/MySQL에서는 어떻게 해야 하나요?

밝혀진 바와 같이, 이것은 매우 간단합니다. 예를 들어 Postgre에서는SQL(Postgre)SQL에는 하나 또는 여러 행에 대해 원하는 값을 반환하는 이 있습니다.이게 바로 내가 원하는 것이고 효과가 있다.

안타깝게도 마리아DB와 MySQL 모두 Postgre를 가지고 있지 않습니다.SQL의RETURNING조항, 그래서 나는 다음과 같은 것을 다시 언급할 필요가 있다.LAST_INSERT_ID()단, 이 명령어는ID한 줄로 여러 줄을 삽입해도 한 줄로 삽입할 수 있습니다.INSERT어떻게 하면 이 모든 것을 얻을 수 있을까요?ID가치관?

현재 코드는 다음과 같습니다.

INSERT INTO mytable
  (foo, bar)
VALUES
  ('fooA', 'barA'),
  ('fooB', 'barB');

SELECT LAST_INSERT_ID() AS id;

동시 쓰기를 사용하더라도 이 문제를 해결하는 방법은 무엇입니까?

(또한 UUID 필드 또는 이와 유사한 필드로 변경하는 옵션은 아닙니다.자동 증분 필드는 지정되며 변경할 수 없습니다.)

MySQL 및 MariaDB는LAST_INSERT_ID()현재 세션의 최신 INSERT 문에 의해 생성된 ID를 반환합니다.

그러나 INSERT 스테이트먼트가 여러 행을 삽입하면LAST_INSERT_ID()생성된 집합의 첫 번째 ID를 반환합니다.

이러한 여러 행의 배치에서는 후속 ID가 연속되는 것을 신뢰할 수 있습니다.예를 들어 MySQL JDBC 드라이버는 이에 의존합니다.

삽입하는 행에 id 열의 NULL 값과 NULL 이외의 값이 혼재하는 경우 이 가정이 흐트러질 위험이 있습니다.JDBC 드라이버는 생성된 ID 집합에 대해 잘못된 값을 반환합니다.

코멘트에 기재된 바와 같이 삽입된ID(SQL Server)를 캡처할 수 있습니다.

use tempdb

create table test (
    id int identity(1,1) primary key,
    t varchar(10) null
)

create table ids (
    i int not null
)

insert  test(t)
output  inserted.id into ids
values (null), (null), (null)


select  *
from    test

select  *
from    ids

언급URL : https://stackoverflow.com/questions/50102817/how-to-get-inserted-ids-of-multiple-rows-on-one-insert

반응형