MySQL INSERT 和 ON DUPLICATE SELECT 可能吗?

标签 mysql sql insert last-insert-id

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 and INSERT ... UPDATE inserts a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. If the statement updates a row instead, LAST_INSERT_ID() is not meaningful. However, you can work around this by using LAST_INSERT_ID(expr). Suppose that id is the AUTO_INCREMENT column. To make LAST_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/

相关文章:

MySQL 3 个表的多重连接

php - 将 CURRENT_TIMESTAMP 保存为 GMT

sql - 有没有办法优化 SQL 选择中的子查询数组?

MySQL - 如果第一个外键为空,如何处理使用第二个外键的情况?

mysql - SQL 查询破坏了我们的游戏! (后端服务器已满)

mysql - 根据主表的一个属性将数据输入到具有外键关系的2个表中

mysql - 需要结合时间戳字段日期和varchar字段时间

php - Yii 模型 : convert table name to lower case

javascript - ServiceNow - 查询表和插入事件

sql - 从选择查询中插入查询值