2013-01-08 11 views
0

说,我有一个简单的表:id作为主键,和field。然后我做: INSERT INTO table(id,field) VALUES (1,'blah') 然后我再做一次。所以,我怎样才能使MySQL回报下列内容:如何让MySQL在重复键上返回冲突键?看看里面

ID

因此,它的工作原理是SELECT-ING冲突的关键?

+0

那么,它只是不会让你“再来一次”,所以绝不会有矛盾的钥匙,只要你定义“ID”为一个主键。你为什么需要这个? – Aioros

+4

MySQL将返回一个重复键错误 - 如何分析它取决于你的语言和API。 –

回答

0

我不认为这是可能没有一些代码,MySQL会返回一个通用的重复键错误

随着码解决方案:

是否使用一个AUTO_INCREMENT列?

如果使用INSERT忽略和行被忽略,

的AUTO_INCREMENT计数器不增加和LAST_INSERT_ID()返回0,

这反映出没有行插入。

这样:

  • INSERT忽略
  • 如果LAST_INSERT_ID(),那么做(新行已插入)
  • 否则你的数据是重复的

last_insert_id() documentation >

insert Ignore documentation >

0

您可以考虑以下...

DROP TABLE IF EXISTS my_table; 

    CREATE TABLE my_table(my_id INT NOT NULL PRIMARY KEY,my_field VARCHAR(12) NOT NULL,conflict TINYINT NOT NULL DEFAULT 0); 

    INSERT INTO my_table (my_id,my_field) VALUES (1,'blah') ON DUPLICATE KEY UPDATE conflict = 1; 

    SELECT * FROM my_table WHERE conflict = 1; 
    Empty set (0.00 sec) 

    INSERT INTO my_table (my_id,my_field) VALUES (1,'blah') ON DUPLICATE KEY UPDATE conflict = 1; 
    Query OK, 2 rows affected (0.07 sec) 

    SELECT * FROM my_table WHERE conflict = 1; 
    +-------+----------+----------+ 
    | my_id | my_field | conflict | 
    +-------+----------+----------+ 
    |  1 | blah  |  1 | 
    +-------+----------+----------+