PDO的LastInsertID会中断AWS复制吗?

时间:2018-09-04 11:44:05

标签: mysql amazon-web-services pdo database-replication last-insert-id

PDO lastinsertid函数是否使用MySQL的last_insert_id函数?

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

  

其他可能导致复制错误的常见情况包括:...使用不安全的不确定性查询

mysql manual指出,虽然我使用的功能实际上并不安全:

  

不确定功能不被认为不安全

我计划重写now()的用法,但是由于PDO(而不是我)正在查询,因此我不确定如何避免使用last_insert_id。我无法单独进行select,因为很可能insert是并行运行的,我将获得错误的ID。

1 个答案:

答案 0 :(得分:2)

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