我正在insert ignore into........使用Python 在mysql中运行查询
运行查询后,我想知道该行的主键.我知道有查询
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否适用于插入忽略
做这个的最好方式是什么?
Pis*_*3.0 32
文档的LAST_INSERT_ID()说:
如果使用INSERT IGNORE并忽略该行,则AUTO_INCREMENT计数器不会递增,LAST_INSERT_ID()将返回0,这表示未插入任何行.
知道了这一点,你可以把它变成一个多步骤的过程:
美国州的示例:
id | abbrev | other_data
1 | AL | ...
2 | AK |
UNIQUE KEY abbr (abbrev)
Run Code Online (Sandbox Code Playgroud)
现在,插入一个新行:
INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done
Run Code Online (Sandbox Code Playgroud)
插入一个将被忽略的行:
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!
Run Code Online (Sandbox Code Playgroud)
或者,有一种可能的解决方法是一步完成 - 使用REPLACE INTO而不是INSERT IGNORE INTO- 语法非常相似.但请注意,此方法存在副作用 - 这些可能对您有用,也可能不重要:
INSERT IGNORE保留旧的行数据,REPLACE用新的行数据替换它Tim*_*nen 17
尝试使用ON DUPLICATE KEY而不是INSERT IGNORE,这可能对您有用:
INSERT INTO your_table (`id`,`val`) VALUES(1,'Foo') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(`id`);
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
另请参阅相关问题:MySQL ON DUPLICATE KEY - 最后一次插入ID?
| 归档时间: |
|
| 查看次数: |
18053 次 |
| 最近记录: |