如何避免sql语句 UPDATE dev_setting AS ds1 JOIN dev_setting AS ds2 ON ds2.external_port = 0 and ds1.dev_id = ds2.dev_id SET ds1.dev_light = ds2.dev_light, ds1.dev_ct = ds2.dev_ct, ds1.dev_ch = ds2.dev_ch, ds1.dev_cth = ds2.dev_cth, ds1.vpd_ct = ds2.vpd_ct, ds1.backlight_switch = ds2.backlight_switch, ds1.has_backlight_switch = ds2.has_backlight_switch, ds1.dev_company = ds2.dev_company WHERE ds1.dev_id = #{devId} and ds1.external_port != 0死锁
时间: 2024-04-26 16:21:52 浏览: 189
防止sql注释语句躲避密码检查
要避免此SQL语句引起死锁,可以采用以下措施:
1. 尽可能减少事务的持续时间,即尽快提交事务。如果事务过长,会增加死锁的风险。
2. 为表上的列添加索引,以减少锁定行的数量。
3. 在更新之前,通过SELECT ... FOR UPDATE语句锁定要更新的行,以避免多个事务同时尝试更新同一行。
4. 将事务的操作顺序统一,即让所有事务都按照相同的顺序访问表,以避免交错产生死锁。
5. 尽可能使用较低级别的隔离级别,如READ COMMITTED,而不是SERIALIZABLE。
总之,要避免死锁,需要对事务进行合理的设计和管理,同时采取一些措施来减少锁定行的数量,以及尽量减少事务的持续时间。
阅读全文