由于表中有两条重复的记录,我用delete from main where id = 1 limit 1;
试图删除其中的一条,main中的还剩下一条,这个结果没问题,
但相应的副标slave中却一条都没有了,好像直接执行了 delete from main where id = 1
而没有执行limit 1子句。我的触发器就是写成了:
delete from slave where id = old.id; 
确实没有添加limit 1, 但是触发器是不是不会自动抄下后边的limit 1并执行呢?

解决方案 »

  1.   


    不会。触发器语句和你激活触发器的语句之间是没有这样的关联关系的。你可以看看日志里面记录的SQL语句,带-VV 参数,就能够看到完整的命令了。所以你的从全部被删除了,是正确的。
    delete from slave where id = old.id limit 1; 
    这样就不会了。
      

  2.   


    -VV的运行具体是哪个命令呢?哪个日志文件?还有,如果像以下这样设置,碰上delete from slave where id = old.id操作又该如何呢?
    二者不能兼得吗?
      

  3.   

    shell> mysqlbinlog binlog.0000003 -vv 
    这样查看二进制日志的内容。还有,如果像以下这样设置,碰上delete from slave where id = old.id操作又该如何呢?
    在触发器里select count(*) into @A from slave where id=old.id
    if @A=1 then
       delete from slave where id = old.id;
    else
       delete from slave where id = old.id limit 1;
    end if;