我有一张桌子user
。它有id
和email
列。
USER TABLE
id | email
1 | xxx@gmail.com
2 | yyy@gmail.com
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 = 'xxx@gmail.com';
END;
INSERT INTO user
(email)
VALUES
('xxx@gmail.com');
SELECT LAST_INSERT_ID() INTO id;
END;
我想知道是否有更好的方法来做到这一点。这是为了避免再次扫描表格以获取其已扫描的ID以检查电子邮件的唯一性。
答案 0 :(得分:1)
使用UNIQUE KEY
BTREE
进行扫描时使用速度非常快。
您是否希望在其他select
查询
答案 1 :(得分:0)
使用INSERT ... ON DUPLICATE KEY UPDATE
,然后get the autoincremented id as usual:
如果表包含
AUTO_INCREMENT
列并且INSERT ... ON DUPLICATE KEY UPDATE
插入或更新行,则LAST_INSERT_ID()
函数将返回AUTO_INCREMENT
值。例外:对于更新,LAST_INSERT_ID()
在MySQL 5.1.12之前没有意义。但是,您可以使用LAST_INSERT_ID(expr)
解决此问题。假设id
是AUTO_INCREMENT
列。要使LAST_INSERT_ID()
对更新有意义,请按如下方式插入行:INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;