mysql 当 autocommit=1 并且所有 sql 对一行 CRUD 足够简单时会发生死锁吗?
Will mysql deadlock happen when autocommit=1 and all sql is simple enough for just CRUD one row?
我的数据库是mysql5.7,innodb,隔离级别是READ COMMITTED。
我怕死锁,所以我保持mysql sql语句简单,只有:
insert into ... where ...
insert into ... where ... on duplicate key update ...
update ... where ...
delete from ... where ...
select * from ... where ...
每个sql只有一个上面的语句。例如:
一个连接 exec insert into ... where ...;
一次,永远不会 exec multi statement insert ... where ...; update ... where ...;
where
语句具有唯一索引约束以确保只操作除select 之外的一行。
只有 select 操作会涉及多行。
我有 64 个或更多 mysql 个连接,并且我将 mysql 操作分开以确保每个连接操作不同的行。
使用autocommit=1配置,会不会发生死锁?如果死锁概率不为零,进入死锁的场景是什么?为什么?我需要帮助。谢谢。
如果您的更新将使用多行操作,或者您没有合适的索引,并且如果您一次对同一行执行多个操作,那么很可能会出现死锁。
如果您看到,请使用以下命令检查语句是否存在死锁。
SHOW ENGINE=InnoDB STATUS;
我的数据库是mysql5.7,innodb,隔离级别是READ COMMITTED。 我怕死锁,所以我保持mysql sql语句简单,只有:
insert into ... where ...
insert into ... where ... on duplicate key update ...
update ... where ...
delete from ... where ...
select * from ... where ...
每个sql只有一个上面的语句。例如:
一个连接 exec insert into ... where ...;
一次,永远不会 exec multi statement insert ... where ...; update ... where ...;
where
语句具有唯一索引约束以确保只操作除select 之外的一行。
只有 select 操作会涉及多行。
我有 64 个或更多 mysql 个连接,并且我将 mysql 操作分开以确保每个连接操作不同的行。
使用autocommit=1配置,会不会发生死锁?如果死锁概率不为零,进入死锁的场景是什么?为什么?我需要帮助。谢谢。
如果您的更新将使用多行操作,或者您没有合适的索引,并且如果您一次对同一行执行多个操作,那么很可能会出现死锁。
如果您看到,请使用以下命令检查语句是否存在死锁。
SHOW ENGINE=InnoDB STATUS;