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');
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');