mysql update delete 安全模式

在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常。

异常内容: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 Queries and reconnect.


因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令

SET SQL_SAFE_UPDATES = 0
修改下数据库模式

安全起见,执行完操作后,建议在恢复成默认状态1

### 如何在MySQL安全模式下执行删除操作 当处于MySQL安全更新模式safe update mode)时,直接执行不带`WHERE`子句或其他限定条件DELETE语句会被阻止。这是因为设置此模式旨在防止意外地修改大量数据记录而未加筛选。 为了能够在安全模式下成功执行删除命令,可以采取如下方法之一: - **指定主键或唯一索引字段作为过滤条件** 如果要移除特定的一条或多条记录,则可以在`DELETE`语句中加入针对表内主键或是具有唯一性的列名来构建精确匹配的`WHERE`子句。例如,在名为`employees`的数据表里定位并清除ID为10086的那个员工的信息: ```sql DELETE FROM employees WHERE employee_id = 10086; ``` - **利用LIMIT关键字控制影响范围** 对于那些确实需要批量清理却难以确切指明每一条目标记录的情况,可以通过附加`LIMIT`参数的方式限制受影响行数的最大限额,从而减少误删风险的同时满足业务需求。 假设想要随机选取前五位入职日期最早的职员予以解雇处理: ```sql DELETE FROM employees ORDER BY hire_date ASC LIMIT 5; ``` 需要注意的是,上述两种方式均需确保SQL语句包含了有效的`WHERE`条款或者是组合了`ORDER BY ... LIMIT`结构,以此绕过由`--safe-updates`选项所施加的安全屏障[^1]。 此外,如果临时希望关闭这项保护机制以便更自由地编写不受约束的DML(Data Manipulation Language)指令,可通过会话级别的配置变更实现这一点;只需先断开当前客户端连接再重新建立新的链接之前输入下面这条设定即可暂时解除该功能的影响: ```sql SET SQL_SAFE_UPDATES=0; ``` 不过建议仅限于充分理解潜在后果并且确认不会造成不可逆损害的前提下谨慎采用此类做法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值