0

说,我有一个简单的表:id作为主键,并且field. 然后我做: INSERT INTO table(id,field) VALUES (1,'blah') 然后我再做一次。那么,我怎样才能让 MySQL 返回以下内容:

ID

1

这样它就可以像 SELECT-ing 冲突键一样工作?

4

2 回答 2

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 |
    +-------+----------+----------+
于 2013-01-08T11:59:02.137 回答
0

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

带码解决方案:

您是否使用 AUTO_INCREMENT 列?

如果您使用 INSERT IGNORE 并且该行被忽略,

AUTO_INCREMENT 计数器不递增并且 LAST_INSERT_ID() 返回 0,

这反映了没有插入任何行。

所以:

  • 插入忽略
  • 如果 LAST_INSERT_ID(),则完成(插入新行)
  • 否则你的数据是重复的

last_insert_id() 文档 >

插入忽略文档>

于 2013-01-08T11:57:11.150 回答