0

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

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

知道身份证怎么办?

为了更好地向您展示我想要的东西,这里有一个使用两个查询来帮助您更好地理解的示例:

第一次我只是做一个 SELECT 查询来查看 ID 是否存在。
如果它不存在(最常见),我会创建一个新行,忽略作为输入提供的 ID,并使用 MySQL 的 AUTO_INCREMENT 作为 ID。

有没有办法存档这个?

注意:由于外键在这里工作。使用 REPLACE 而不是 INSERT INTO不是答案。

注意2:因为我想强制使用AUTO_INCREMENT,如果它不存在,乍一看,INSERT IGNORE INTO 似乎也不是答案。除非我错过了什么......这也是我问的原因。

4

1 回答 1

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。

于 2013-03-28T19:05:01.900 回答