【发布时间】:2017-09-01 05:38:29
【问题描述】:
我已经搜索了几天的答案,但我似乎无法找到正确的解决方案。因此,我提出以下问题:
假设我有一个表,其中有一列 ID 是一个 AUTO_INCREMENT 字段,而一列 Word 是唯一的。我运行以下查询:
"INSERT IGNORE INTO Table (Word) VALUES('Test')"
"INSERT IGNORE INTO Table (Word) VALUES('Test1')"
"INSERT IGNORE INTO Table (Word) VALUES('Test2')"
"INSERT IGNORE INTO Table (Word) VALUES('Test')" //THIS ONE WILL BE IGNORED
问题是我无法从最后一个查询中得到最后一个$mysqli->insert_id,因为它没有插入任何东西。但是我需要这个已经在数据库中的 ID。因此,我认为我应该使用 ON DUPLICATE KEY UPDATE 语句,但这会导致 AUTO_INCREMENT 跳过值的情况,因为它会更新值,但 ALSO 会增加 AUTO_INCREMENT 值,尽管此值不是t 分配给任何行。
所以最后,我得到了一张这样的表格:
ID |Word
1 |Test
2 |Test1
3 |Test2
//Trying to insert words that where already in the table..
12 |Test3
//Trying to insert words that where already in the table..
17 |Test4
【问题讨论】:
-
为什么这很重要?
-
我认为这是 stackoverflow.com/a/6291568/1625955 的副本,也许有帮助。
-
@NiettheDarkAbsol,因为我有很多行得到 IGNORE 或 DUPLICATE UPDATE 并且我的整数因此而大幅增长。因此,我得到非常大的整数,可能会小得多(超过 1000 倍,这就是为什么)
-
@Jens,感谢您的链接。但是,我正在执行的语句已经在事务中。因此,这对我来说不是最佳解决方案,因为我需要另一笔交易?
-
无论如何,整数总是 4 字节,你有 40 亿的空间。如果这还不够,请使用
BIGINT。但实际上你不需要它。
标签: php mysql auto-increment mysql-insert-id