尝试从表中删除行时,我不断收到这些错误.这里的特例是我可能同时运行5个进程.
该表本身是一个约450万行的Innodb表.我的WHERE子句中使用的列没有索引.其他指数正如所料.
它是在一个transcation中完成的,首先我删除记录,然后我插入替换记录,并且只有在插入所有记录时才应该提交事务.
错误信息:
Query error: Lock wait timeout exceeded; try restarting transaction while executing DELETE FROM tablename WHERE column=value
这里在引用列上创建索引会有帮助吗?我应该明确锁定行吗?
我在问题#64653中找到了一些其他信息,但我不认为它完全涵盖了我的情况.
是否确定是导致错误的DELETE语句,还是查询中的其他语句? DELETE语句是第一个,所以它似乎合乎逻辑,但我不确定.
解决方法:
索引肯定会有所帮助.如果您尝试替换已删除的记录,我建议您修改查询以使用更新而不是DELETE后跟INSERT,如果可能的话:
INSERT INTO tableName SET
column2 = 'value2'
WHERE column = value
ON DUPLICATE KEY UPDATE
column2 = 'value2'
标签:mysql,locking,delete-row 来源: https://codeday.me/bug/20190627/1301195.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。