【发布时间】:2018-09-04 11:44:04
【问题描述】:
PDO lastinsertid 函数是否使用 MySQL 的 last_insert_id 函数?
我对使用AWS 进行复制以及根据 AWS manual 使用一些 MySQL 函数中断复制特别感兴趣:
可能导致复制错误的其他常见情况包括:...使用不安全的非确定性查询
mysqlmanual 声明我使用的函数实际上并不安全:
非确定性函数不被认为是不安全的
我计划重写我的now() 用法,但我不确定如何避免last_insert_id,因为 PDO,而不是我,正在查询它。我不能单独使用select,因为insert 很可能是并行运行的,我会取回错误的 ID。
【问题讨论】:
-
关于PDO功能如何实现,the source is here。它使用 MySQL 驱动程序的内部函数
mysql_insert_id,即reads a value already fetched during execution。所以不会触发对 MySQL 的额外调用,但我不知道复制的含义是什么。 -
如果您使用
binlog_format=ROW甚至MIXED,那么您将不必担心非确定性查询。阅读dev.mysql.com/doc/refman/8.0/en/replication-formats.html -
NOW()即使在使用基于语句的复制时也是安全的。在此处查看“非不安全”(原文如此)函数列表:dev.mysql.com/doc/refman/8.0/en/… -
@BillKarwin 我在 AWS 实例中有
binlog_format=ROW, mixed。这打破了那里的复制。我在使用标准mysql实例时没有遇到过这个问题,我过去使用过mixed。
标签: mysql amazon-web-services pdo database-replication last-insert-id