행이 없는 경우 행을 삽입하는 방법, 그렇지 않으면 MariaDB에서 두 경우 모두 ID를 선택하고 반환하는 방법은 무엇입니까?
저랑 자리가 있어요.ID
기본 키(자동 증분) 및 고유 열Name
. MariaDB에서 동일한 경우 이 테이블에 행을 삽입하는 효율적인 방법이 있습니까?Name
존재하지 않습니다. 그렇지 않으면 기존 행을 선택하고 두 경우 모두 이 값으로 행의 ID를 반환합니다.Name
?
Postgres를 위한 해결책이 있습니다.하지만 MariaDB는 그것을 가지고 있지 않은 것 같습니다.RETURNING id
절지금까지 시도해 본 것은 단순한 강요입니다.
INSERT IGNORE INTO services (Name) VALUES ('JohnDoe');
SELECT ID FROM services WHERE Name='JohnDoe';
업데이트: MariaDB 10.5는RETURNING
하지만 지금까지 시도한 쿼리는 구문 오류를 던집니다.
WITH i AS (INSERT IGNORE INTO services (`Name`) VALUES ('John') RETURNING ID)
SELECT ID FROM i
UNION
SELECT ID FROM services WHERE `Name`='John'
단일 행의 경우 다음과 같이 가정합니다.id
가AUTO_INCREMENT
.
INSERT INTO t (name)
VALUES ('JohnDoe')
ON DUPLICATE KEY id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();
그것은 지저분해 보이지만, 설명서에 나와 있는 예시입니다.
주의:대부분의 형태는INSERT
auto_incids를 "burn"할 것입니다.즉, ID가 사용되지 않을 것이라는 것을 인지하기 전에 다음 ID를 가져옵니다.이로 인해 최대 auto_inc 크기가 오버플로될 수 있습니다.
코드의 "고기"를 하는 거래 안에 정규화를 넣지 않는 것도 현명합니다.테이블을 불필요하게 길게 묶고 롤백할 경우 ID를 태울 위험이 추가됩니다.
이와 같은 '정규화' 테이블의 일괄 업데이트에 대해서는 http://mysql.rjweb.org/doc.php/staging_table#normalization 을 참조하십시오. ID를 굽지 않습니다.
언급URL : https://stackoverflow.com/questions/62931193/how-to-insert-a-row-if-not-exists-otherwise-select-and-return-its-id-in-both-cas
'programing' 카테고리의 다른 글
Should I use Vagrant or Docker for creating an isolated environment? (0) | 2023.09.13 |
---|---|
Android에서 다른 조각으로 이동한 후 탐색 스택을 지우는 방법 (0) | 2023.09.13 |
지난 5년간 조회 (0) | 2023.09.13 |
min SDK version/target SDK version과 complete SDK version의 차이점은 무엇입니까? (0) | 2023.09.13 |
워드프레스 응답 이미지 - 망막 화면에서 잘못된 이미지 선택 (0) | 2023.09.13 |