Error number: MY-012794; Symbol: ER_IB_MSG_969; SQLSTATE: HY000
Message: %s
MySQL错误号:MY-012794; 名称:ER_IB_MSG_969; SQLSTATE: HY000
错误说明
MySQL的ER_IB_MSG_969错误否定了一个对InnoDB引擎的操作,因为它已经获取了一组具有唯一性约束的锁定行中的唯一键值的其他比较锁定。
它的SQLSTATE是HY000,与一般的MySQL错误有所不同,因为MySQL可以为某些错误分配多个SQLSTATE。
常见案例
此错误常常出现在使用InnoDB更新唯一键值冲突时,InnoDB会输出这个消息以解释为哪个键值而创建。
还有,如果程序正在更新主键就会遇到此错误,因为InnoDB锁定整个行以确保一致性。
解决方法
改变SQL语句里用了相同键值的代码,保证不管是INSERT还是UPDATE都能够使用不同的键值来解决这个问题。
另外,检查锁表的情况是很有用的,因为如果你的mysqld会持有锁定太长时间就会有这个错误。当MySQL卡在其中一个事务中时,这是不可避免的。释放所有暂时性锁定,并确保表中构建索引,并且在查询期间锁定行的程序不会出现。
此外,如果在执行一条INSERT或UPDATE语句时,有其他的程序正在锁定要更新的行,甚至可能存在一个锁定等待锁定事件,那么可以改变程序的锁定策略,减少锁定冲突的可能性。