有没有办法做“如果不存在则插入auto_increment”?

时间:2013-03-28 18:58:17

标签: mysql auto-increment insert-into

我有一个看起来像这样的表:

| ID | int PRIMARY  
| Name | varchar  
| timestamp | timestamp

如何知道身份证?

为了更好地向您展示我想要的内容,下面是一个使用两个查询来帮助您更好地理解的示例:

1我只是进行SELECT查询以查看ID是否存在 如果它不存在(最常见),我创建一个新行,忽略我作为输入给出的ID,我使用MySQL的AUTO_INCREMENT作为ID。

有没有办法存档?

注意:由于外键如何在这里工作。使用REPLACE代替INSERT INTO是的答案。

注2:因为我想强制使用AUTO_INCREMENT(如果它不存在),乍一看,INSERT IGNORE INTO似乎也不是答案。除非我遗漏了某些东西......这也是我要问的原因。

1 个答案:

答案 0 :(得分:0)

听起来你要做的就是更新重复密钥

INSERT INTO yourTable (
    id,
    name,
    timestamp
) VALUES (
    5,
    'something',
    NOW()
)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    timestamp = VALUES(timestamp);

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

INSERT () VALUES ()是直截了当的。 ON DUPLICATE KEY UPDATE告诉它如果UNIQUE / PRIMARY键冲突,那么这应该更新该行中的一些值。 fields = VALUES(fields)语法告诉它使用INSERT中指定的值更新冲突行中的那些字段。

第二种方法是使用存储过程来处理执行必备SELECT的表的INSERT,因为在同一查询中的表上不能同时SELECT和INSERT。