email_address
-------------
id
prefix
fqdn
前缀和 FQDN 一起形成唯一的 key 。
我想编写一个查询,如果电子邮件地址尚未在表中,则该查询将执行插入操作。如果地址已在表中,则应返回 id。
有没有一种方法可以编写类似于INSERT INTO email_address(prefix, fqdn) VALUES (?, ?) ON DUPLICATE SELECT id as LAST_INSERT_ID WHERE prefix = ? AND fqdn = ?
的查询如果合法的话会吗?
基本上我想在一个查询中执行 INSERT 或 SELECT。
最佳答案
If a table contains an
AUTO_INCREMENT
column andINSERT ... UPDATE
inserts a row, theLAST_INSERT_ID()
function returns theAUTO_INCREMENT
value. If the statement updates a row instead,LAST_INSERT_ID()
is not meaningful. However, you can work around this by usingLAST_INSERT_ID(expr)
. Suppose that id is theAUTO_INCREMENT
column. To makeLAST_INSERT_ID()
meaningful for updates, insert rows as follows:
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
关于MySQL INSERT 和 ON DUPLICATE SELECT 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188073/