如何在实际插入新记录之前确定下一个插入 ID 值(在事务内)?
How to determine next insert id value (inside a transaction) before actually inserting a new record?
如果我有一个带有 id 列(自动增量)的 table。如何在同一事务中实际插入新记录之前获取下一个插入id的值?
您可以执行此查询:
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA, TABLE_NAME) = ('mydatabase', 'mytable');
(当然你会命名你的数据库和table,我只是举个例子。)
这会在您 运行 查询 时为您提供下一个 auto-increment 值 。但在下一瞬间,其他一些客户端可能会插入一行,从而导致使用该 id。所以你的值几乎一查询就出错
您可以通过 locking your table 阻止并发插入,但大多数人不喜欢这样做,因为它会阻止并发操作。
除此之外,保证您提前知道下一个 auto-increment 值的唯一方法是执行 INSERT,然后查询 LAST_INSERT_ID()
或连接器提供的类似函数。例如,PDO::lastInsertId().
如果我有一个带有 id 列(自动增量)的 table。如何在同一事务中实际插入新记录之前获取下一个插入id的值?
您可以执行此查询:
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA, TABLE_NAME) = ('mydatabase', 'mytable');
(当然你会命名你的数据库和table,我只是举个例子。)
这会在您 运行 查询 时为您提供下一个 auto-increment 值 。但在下一瞬间,其他一些客户端可能会插入一行,从而导致使用该 id。所以你的值几乎一查询就出错
您可以通过 locking your table 阻止并发插入,但大多数人不喜欢这样做,因为它会阻止并发操作。
除此之外,保证您提前知道下一个 auto-increment 值的唯一方法是执行 INSERT,然后查询 LAST_INSERT_ID()
或连接器提供的类似函数。例如,PDO::lastInsertId().