说,我有一个简单的表:id
作为主键,并且field
. 然后我做:
INSERT INTO table(id,field) VALUES (1,'blah')
然后我再做一次。那么,我怎样才能让 MySQL 返回以下内容:
ID
1
这样它就可以像 SELECT-ing 冲突键一样工作?
说,我有一个简单的表:id
作为主键,并且field
. 然后我做:
INSERT INTO table(id,field) VALUES (1,'blah')
然后我再做一次。那么,我怎样才能让 MySQL 返回以下内容:
ID
1
这样它就可以像 SELECT-ing 冲突键一样工作?
你可以考虑以下...
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 |
+-------+----------+----------+
我认为没有一些代码是不可能的,mysql会返回一个通用的重复键错误
带码解决方案:
您是否使用 AUTO_INCREMENT 列?
如果您使用 INSERT IGNORE 并且该行被忽略,
AUTO_INCREMENT 计数器不递增并且 LAST_INSERT_ID() 返回 0,
这反映了没有插入任何行。
所以: