我正在insert ignore into........使用Python 在mysql中运行查询
insert ignore into........
运行查询后,我想知道该行的主键。我知道有查询
SELECT LAST_INSERT_ID();
但是我不确定它是否可以与插入忽略一起使用
做这个的最好方式是什么?
文档的LAST_INSERT_ID()说:
LAST_INSERT_ID()
如果使用INSERT IGNORE并且忽略该行,则AUTO_INCREMENT计数器不会增加,并且LAST_INSERT_ID()返回0,这表明没有插入行。
知道了这一点,您可以将其分为多个步骤:
美国各州的示例:
id | abbrev | other_data 1 | AL | ... 2 | AK | UNIQUE KEY abbr (abbrev)
现在,插入新行:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar'); > OK SELECT LAST_INSERT_ID(); > "3" // we have the ID, we're done
插入将被忽略的行:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!'); > OK SELECT LAST_INSERT_ID(); > "0" // oops, it already exists! SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here > "2" // there we go!
或者,有一种可能的解决方法可以一步完成此操作-使用REPLACE INTO而不是INSERT IGNORE INTO- 语法非常相似。但是请注意,这种方法会 产生副作用 -这些 副作用 可能对您不重要:
REPLACE INTO
INSERT IGNORE INTO
INSERT IGNORE
REPLACE