mysql错误码:1064、1175、1093详解

mysql错误码:1064、1175、1093
1.背景

项目开发中需要将查询出的记录删掉,所以直接将执行成功的select语句中的select *修改为delete,结果执行报错

2.错误码信息

(Error Code: 1064)----(SQL语法中有错误。)
(Error Code: 1175)----(Mysql 中安全更新模式下不允许使用非主键字段更新或者删除记录。)
(Error Code: 1093)----(Mysql 中Delete和Update 语句,不允许子查询中出现update和delete要操作表。)

3.排错流程
-- 1. 查询sql(可执行)
select * from monitorlog_1 m where cid=222222 and src_ipv4 in 
( 
 select src_ipv4 from 
    (
    select cid,src_ipv4,count(*) as num from monitorlog_1 where cid=222222 group by src_ipv4
    ) a
  where num<10
)
-- 2. 修改select *为delete的删除sql(无法执行,错误码1064)
--(将monitorlog_1 m改为monitorlog_1即可修复成实例3)
delete from monitorlog_1 m where cid=222222 and src_ipv4 in 
( 
 select src_ipv4 from 
    (
    select cid,src_ipv4,count(*) as num from monitorlog_1 where cid=222222 group by src_ipv4
    ) a
  where num<10
)
-- 3. 修改错误码1064后的删除sql(依然无法执行,错误码1175)
-- (修改sql获取主键id,然后根据id删除即可修复成实例4)
delete from monitorlog_1 where cid=222222 and src_ipv4 in 
( 
 select src_ipv4 from 
    (
    select cid,src_ipv4,count(*) as num from monitorlog_1 where cid=222222 group by src_ipv4
    ) a
  where num<10
)
-- 4. 修改错误码1175后的删除sql(依然无法执行,错误码1093)
-- (Mysql 中Delete和Update 语句,不允许子查询中出现update和delete要操作表。)
delete from monitorlog_1 where id in 
(
  select id from monitorlog_1 where cid=222222 and src_ipv4 in 
  ( 
   select src_ipv4 from 
      (
      select cid,src_ipv4,count(*) as num from monitorlog_1 where cid=222222 group by src_ipv4
      ) a
    where num<10
  )
)
-- 5. 正确sql
//查看数据库安全模式是否打开(ON打开,OFF关闭)
show variables like 'sql_safe_updates';
//关闭安全模式
SET SQL_SAFE_UPDATES = 0;
//删除多余记录
delete from monitorlog_1 where cid=222222 and src_ipv4 in 
( 
 select src_ipv4 from 
    (
    select cid,src_ipv4,count(*) as num from monitorlog_1 where cid=222222 group by src_ipv4
    ) a
  where num<10
)
//打开安全模式
SET SQL_SAFE_UPDATES = 1;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值