邯郸网站建设哪家强百度北京总部电话
update delete 操作,如果走的索引,对索引和主键索引加行锁
如果没有走索引,锁整张表。
不开启事务,mysql本身也会加锁
一般MYSQL在执行CREATE,ALTER,INSERT等命令时会自动加锁
在对数据进行更新操作时
如果update没用到索引,直接锁表,不会死锁
如果update用到了索引,根据索引查询顺序进行索引加锁。因此可能会加锁顺序不一致导致死锁。
解决办法:
1、禁用index_merge
在查询的时候只会走一个索引,不会都走。如果不禁用index_merge。会先走id1索引,再走id2索引,将查询结果求交集。
2、把两个索引设置成联合索引
3、先使用select查询出要更新的数据主键,再根据主键进行更新。