好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MySQL Error number: MY-013453; Symbol: ER_LOCK_ORDER_DEPENDENCIES_SYNTAX; SQLSTATE: HY000 报错

文档解释

Error number: MY-013453; Symbol: ER_LOCK_ORDER_DEPENDENCIES_SYNTAX; SQLSTATE: HY000

Message: Lock order dependencies file (%d:%d) – (%d:%d) : %s

错误说明:

MySQL 错误号 MY-013453、符号 ER_LOCK_ORDER_DEPENDENCIES_SYNTAX 和 SQLSTATE 设置为 HY000 都是表示锁顺序相互依赖语法出错的错误代码,指当试图在 SELECT 语句中建立一个锁顺序相互依赖时,表达式有语法问题。

常见案例

假设你有一个包含两个表的查询,而团队要求其中一个表(table1)必须是 For Share 锁模式,另一个表(table2)必须是 For Update 锁模式。但是当尝试用以下示例查询时,它就会触发此错误:

SELECT *

FROM table1 LOCK IN SHARE MODE, table2 FOR UPDATE;

这是因为上面的表达式中的语法有误,正确的语法应该如下所示:

SELECT *

FROM table1 LOCK IN SHARE MODE, table2 LOCK IN UPDATE MODE;

解决方法:

为了解决上述错误,只需确保在 SELECT 查询中对表的排序依赖表达式的语法正确即可。如果需要给几个不同的表加锁,才需要在第一个表后跟着关键字 LOCK IN,然后指定依次后续表所采用的锁模式。

例如,你还可以在上述语句中添加新表,并需要在这个表上也加锁,这时只需要在第一个表后面添加 LOCK IN 关键字就可以了,这样就可以遵循上述的语法规范:

SELECT *

FROM table1 LOCK IN SHARE MODE, table2 LOCK IN UPDATE MODE, table3 LOCK IN SHARE MODE;

我们也可以使用其他位置来指定 LOCK IN,例如:

SELECT *

FROM table1, table2 LOCK IN SHARE MODE, table3 FOR UPDATE;

值得指出的是,如果你试图在同一个表上指定不同的锁模式,那么也可能会触发此错误信息,因此应该注意避免。

查看更多关于MySQL Error number: MY-013453; Symbol: ER_LOCK_ORDER_DEPENDENCIES_SYNTAX; SQLSTATE: HY000 报错的详细内容...

  阅读:9次