十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你写了一条正常的update 或者 delete 语句时,语句本身是没问题的,但是却执行不了。原因是是MySQL Workbench的安全设置。当要执行的SQL语句是进行批量更新或者删除的时候就会提示这个错误。
在涪城等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站建设 网站设计制作按需网站设计,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,外贸网站建设,涪城网站建设费用合理。
打开Workbench的菜单Edit-Preferences xxx-切换到SQL Editor
把Forbid UPDATE and DELETE statements without a WHERE clause (safe updates)的勾去掉击[OK]按钮重新启动就OK了。
或者在每句语句前,加上‘SET SQL_SAFE_UPDATES=0;’
问题就解决了。
(ps:以后我会分享我所遇到的问题,这里持续更新!)
这个错误是由于你用了事物,导致表的死锁。 死锁的原因很多,如果你的批量插入有依赖性的话,可能在Mysql里面形成了脏读。
第一步先解决你的死锁问题,用指令show engine innodb status \G 查看是那一个查询进程锁表, 找出来ID,杀掉它。
第二步检查自己的程序的SQL语言,一般批量插入的话尽量用insert into (),(),().... 一个SQL来执行,如果需要检查是否存在然后插入或替换,如果表有唯一索引或主键,用replace, 其他格式一样。
第三步检查你的访问数据库的逻辑,在什么时候进行的commit,你在读写的时候是否设定了独占式访问方法, 或数据库中已经其他的存储过程或触发器同时在操作这个表。
如果以上都无效,你最好是通过上述指令同时监控你的程序并在mysql里面用show process list查看是哪一个ID出了问题。
对table某行数据进行更新,发现修改不了数据,报错如下:
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences - SQL Editor and reconnect.
原因是MySQL安全等级高,更新时不用主键当where语句,就会拒绝update。
写入Mysql语句:set sql_safe_updates =0;
之后再进行操作即可。
MYSQL的UPDATE关于检查更新前后数据是否变化,只有数据变化的时候才真正进行更新操作,例如你的语句:
update user set name='xiaoy' where id=1
如果id唯一、并且存在有1的记录,而且name上没有限制,那么执行结果有两种可能:
Rows matched: 1 Changed: 1 Warnings: 0
Rows matched: 1 Changed: 0 Warnings: 0
如果该记录以前的值就不是xiaoy,那么结果就是第一种,否则是第二种。MYSQL的这个设计,减少无畏了修改操作,提高性能。
如果是name字段有约束导致更新失败,语句是会报错的;警告是字段类型或者长度等超限,导致更新时候进行了处置的情况;changed=0只是信息,连警告都不算。