我有一個表user
。它有專欄id
和email
。當UNIQUE KEY被違反時獲取一行的編號
用戶表
id | email
1 | [email protected]
2 | [email protected]
的id
是PRIMARY KEY AUTO_INCREMENT
和email
爲UNIQUE KEY
。 當我在表中插入一個新行並且有一個DUPLICATE KEY
異常拋出。我想獲取id
,其中DUPLICATE KEY
異常被拋出。
現在我這樣做 -
BEGIN
DECLARE EXIT HANDLER FOR 1062
BEGIN
SELECT id
INTO id
FROM user
WHERE email = '[email protected]';
END;
INSERT INTO user
(email)
VALUES
('[email protected]');
SELECT LAST_INSERT_ID() INTO id;
END;
我想知道是否有更好的方法來做到這一點。這是爲了避免再次掃描表格以獲取它已經掃描的ID以檢查電子郵件的唯一性。
我不想更新。我只想要郵件列給出DUPLICATE KEY值的id。 – JHS
@Juniad:所以只需執行'INSERT ... ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)',如圖所示。什麼都不會改變,但'LAST_INSERT_ID()'會給你你想要的ID。 – eggyal
錯了。這將確實更新'Auto_increment'值,如下所述:http://stackoverflow.com/questions/12692003/avoid-increasing-auto-increment-value-when-using-last-insert-id – l33t