mysql - PDO 的 LastInsertID 会破坏 AWS 复制吗?

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

PDO lastinsertid 函数是否使用 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() 函数、各种绑定(bind)(如 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');

关于mysql - PDO 的 LastInsertID 会破坏 AWS 复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165565/

相关文章:

mysql - 错误 1115 (42000) 在第 29 行 : Unknown character set: 'utf32'

amazon-web-services - 使用 aws sns 从 Java Web 应用程序发送短信

php - 在 mysql 数据库中使用 pdo 保存复选框值

php - PDO::FETCH_CLASS,构造函数参数怎么写?

php - 多个系列、多个图表 Highcharts

mysql - 如何在 MySQL 中为数字添加逗号?

我无法发现的 PHP stmt bindParam 简单错误

linux - 如何使用 FUSE 安装 Amazon S3 存储桶 - S3FS

amazon-web-services - 由于 S3Bucket 资源已存在,Cloudformation 模板失败

mysql - 如何在MySQL表中查找特定列名并清除结果?