• mysql 删除语句


    DELETE FROM `db`.`TABLE` WHERE `A`='a' AND `B`='b';

    这是一个简单的删除语句,单独执行这个语句不会报错,但是将这个语句放到存储过程中运行,执行也不会报错,但是有可能会删掉其他的数据

    CREATE DEFINER=`usr`@`localhost` PROCEDURE `clear`(IN `a` VARCHAR(50), IN `b` VARCHAR(20))
    BEGIN
    DECLARE flag TINYINT DEFAULT '1'; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN SELECT 0 INTO flag; END; START TRANSACTION; DELETE FROM `db`.`TABLE` WHERE `A`=a AND `B`=b; IF flag=0 THEN ROLLBACK; ELSE COMMIT; END IF; SELECT flag; END

    这个存储过程在执行的时候有可能会将满足`A`=a 或 `B`=b其中一个条件的数据全部删除,而不是删除同时满足两个条件的数据,具体为什么会出现这种问题我不清楚。

    经过各种分析和尝试,发现如果在字段名前面带上表名就可以准确的删除想要删除的数据

     DELETE FROM `db`.`TABLE` WHERE `TABLE`.`A`='a' AND `TABLE`.`B`='b';

    将删除语句改成这样就不会出错。

    虽然字段名前面不带表名不一定会出错,但是带表名是肯定不会出错的,而且这样写是个好习惯

    补充:找到原因了,存储过程传入参数如果与表字段名相同就可能出现上述错误,修改存储过程参数名或者字段名前面带上表名就不会出错了

  • 相关阅读:
    用__new__ 创建单例模式
    函数的列表作为默认参数
    循环闭包函数打印列表
    斐波那契函数和回调函数
    类的共享属性
    字典和format用法
    python 面试大全: 01_类变量在内部是作为字典处理的
    git 学习删除某次提交
    mysql调优
    re模块
  • 原文地址:https://www.cnblogs.com/quyixuanblog/p/5464715.html
Copyright © 2020-2023  润新知