天天看点

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;
           

继续阅读