PDO 的 LastInsertID 会破坏 AWS 复制吗?

Will PDO's LastInsertID Break AWS Replication?

PDOlastinsertid函数是否使用了MySQL的last_insert_id函数?

我对使用 AWS 进行复制特别感兴趣,并且根据 AWS manual 使用一些 MySQL 函数中断复制:

Other common situations that can cause replication errors include the following:...Using unsafe nondeterministic queries

mysql manual 声明我使用的函数实际上并不安全:

Nondeterministic functions not considered unsafe

我计划重写我的 now() 用法,但我不确定如何避免 last_insert_id 因为 PDO,而不是我,正在查询它。我不能做一个单独的 select 因为它很可能是一个 insert 是并行的 运行 我会找回错误的 id。

MySQL 的 LAST_INSERT_ID() 函数、各种绑定(如 PDO 的)和底层功能 是确定性的。 您可以放心使用它们。

例如,这是确定性的,适用于任何地方。

  INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
  INSERT INTO detail (master_id, item) VALUES (LAST_INSERT_ID(), 'pepperoni pizza');

这不是。这是你被警告过的那种事情。

  INSERT INTO master (address, town) VALUES('150 Broadway', 'New York');
  SELECT @id := MAX(master_id) FROM master;   /* bad bad bad */
  INSERT INTO detail (master_id, item) VALUES (@id + 1 'pepperoni pizza');