sql 事物锁表问题
Python 对 mysql 的函数支持有问题,执行包含sql函数的更新语句时可能会有问题的,导致锁表后无法操作。
如sql:
UPDATE user_info set create_time = DATE_SUB(NOW(), INTERVAL 1 DAY) where user_id = '123456';
sql执行没有问题,但是放到Python代码中执行,会超时异常,多执行几次会报锁表;
1、锁表后需要手动将卡了事物杀掉:
#查看当前线程 show full processlist; #查看运行中的事物 SELECT * FROM information_schema.INNODB_TRX;
innodb_trx表的参数自行百度,找到执行代码时间创建的事物,结合线程表找到锁表的事物,执行:
kill 线程id
把锁死的线程杀掉即可;
2、代码中可以对变量进行加工后传入sql语句,不要用sql内置函数,如上述sql在代码中要写成:
import datetime user_id = '123456' T = datetime.datetime.now() - datetime.timedelta(days=1) sql = 'UPDATE user_info set create_time = "{}" where user_id = "{}";'.format(T, user_id)