0
email_address
-------------
id
prefix
fqdn

Prefix 和 fqdn 共同构成一个唯一键。

如果电子邮件地址尚未在表中,我想编写一个插入查询。如果地址已经在表中,它应该返回 id。

有没有办法编写一个查询,INSERT INTO email_address(prefix, fqdn) VALUES (?, ?) ON DUPLICATE SELECT id as LAST_INSERT_ID WHERE prefix = ? AND fqdn = ?如果它是合法的?

基本上我想在一个查询中执行 INSERTSELECT。

4

1 回答 1

1

如果表包含一AUTO_INCREMENT列并INSERT ... UPDATE 插入一行,则该LAST_INSERT_ID()函数返回该 AUTO_INCREMENT值。如果语句改为更新一行, LAST_INSERT_ID()则没有意义。但是,您可以使用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;

来自http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2014-01-17T14:38:14.910 回答