我正在尝试MERGE
在 Drupal 中实现 MySQL 驱动程序的某些部分。当然,Drupal 有一些东西,但实际上它只是有效,因为最常见的 MERGE 发行者只是吃异常。
因此,无论我们尝试什么,都会发生死锁。我们做什么,我们开始一个事务,然后SELECT ... FOR UPDATE
,尝试一个INSERT
,如果它导致 23xxx 完整性错误,请尝试一个 UPDATE。死锁。我们删除了FOR UPDATE
我们决定供我们使用的cos,没关系。依旧是僵局。
我不能只切换隔离级别,因为READ COMMITTED
每个SET TRANSACTION 都需要行日志记录:
从 MySQL 5.1 开始,如果使用 READ COMMITTED [...],则必须使用基于行的二进制日志记录。
并且每个READ UNCOMMITTED也需要行日志记录。这里是二进制日志设置:
要更改全局 binlog_format 值,您必须具有 SUPER 权限。对于 MySQL 5.1.29 的 session 值也是如此。
我不能要求每个 Drupal 设置都有SUPER
,我们也不能说 Drupal 与基于语句的二进制日志不兼容,因为这是默认的和最普遍的。
INSERT ... ON DUPLICATE KEY
既不够通用,也没有死锁。
所以现在怎么办?