我有一个看起来像这样的表:
| ID | int PRIMARY
| Name | varchar
| timestamp | timestamp
如何知道身份证?
为了更好地向您展示我想要的内容,下面是一个使用两个查询来帮助您更好地理解的示例:
1我只是进行SELECT查询以查看ID是否存在 如果它不存在(最常见),我创建一个新行,忽略我作为输入给出的ID,我使用MySQL的AUTO_INCREMENT作为ID。
有没有办法存档?
注意:由于外键如何在这里工作。使用REPLACE代替INSERT INTO是不的答案。
注2:因为我想强制使用AUTO_INCREMENT(如果它不存在),乍一看,INSERT IGNORE INTO似乎也不是答案。除非我遗漏了某些东西......这也是我要问的原因。
答案 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。