【问题标题】:In MySQL, delete seems to be truncating the whole table在 MySQL 中,删除似乎正在截断整个表
【发布时间】:2014-02-07 23:04:28
【问题描述】:

我正在尝试为大学作业制作一个简单的项目。在那,当我试图从 MySQL 中的存储过程中删除记录时,该删除语句正在删除所有记录。

代码如下:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE 
           `removebus`(in busnumber int,out message varchar(255))
BEGIN

    delete from fare where busnumber = busnumber;
    delete from bus where busnumber = busnumber;
    set message = 'success';

    else
        set message = 'not found';
    end if;

END

我正在像call removebus(1,@message);一样执行。

当我试图只从命令窗口执行删除语句时,它只删除一条记录,但是当我执行调用语句时,所有记录都从我的表中删除。补充一下,busnumber 是总线表的主键。我无法理解为什么。

【问题讨论】:

  • 我认为缺少代码,您的 IF 语句在哪里??

标签: mysql delete-row


【解决方案1】:

嗯,据我所知,busnumber 总是等于 busnumber... 你不妨写“1 = 1”。

更改变量名称 - 这应该适合您。

【讨论】:

    【解决方案2】:

    你正在跑步

    delete from fare where busnumber = busnumber;
    

    因为表 busnumber 中的每一行都等于自己,因此它们都将被删除。

    尝试将输入变量更改为不与列名冲突的内容。

    【讨论】:

    • busnumber = busnumber 或 1 = 1。无论哪种方式,它总是正确的。
    【解决方案3】:

    两件事。首先delete 不是truncate table。它可能具有相同的结果,但性能却大不相同。 delete 记录其所有交易; truncate table 没有。

    第二,养成使用特殊前缀命名参数参数的习惯,例如:

    CREATE DEFINER=`root`@`localhost` PROCEDURE 
               `removebus`(in in_busnumber int, out out_message varchar(255))
    . . . 
    

    如果你不养成这个习惯,你很可能会在很长一段时间内继续犯同样的错误(至少,这是我的经验)。

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2015-01-17
      • 2021-12-14
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多