【问题标题】:Execute query based on number of rows?根据行数执行查询?
【发布时间】:2012-11-29 20:32:58
【问题描述】:

我对 MySQL 不太熟悉,但我正在尝试创建一个触发器,以便每当插入一行时,如果表中的总行数大于 10,则删除某个行。

我正在寻找的,没有触发器语法,是这样的:

IF (SELECT COUNT(*) FROM table) > 10 THEN
//do some stuff
END IF;

但是,这似乎不是可接受的语法。我该怎么做呢?

【问题讨论】:

    标签: mysql sql database triggers


    【解决方案1】:
    DELIMITER &&
    
    CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW
    
    BEGIN
    
    DECLARE x INT;
    SET x = (SELECT count(*) FROM table_name); 
    
    IF x > 10 THEN
    
        DELETE FROM table_name where condition;
    
    END IF;
    
    END&&
    
    DELIMITER ;
    

    【讨论】:

    • 给我以下错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''before_insert_wall' BEFORE INSERT ON 'wall' FOR EACH ROW BEGIN DECLARE x ' 附近使用正确的语法
    • 不要在触发器名称上使用引号。对了,更多详情请查看dev.mysql.com/doc/refman/5.0/en/create-trigger.html
    • 似乎不像 DECLARE x INT;部分,但我找不到任何错误的原因。
    • 因为默认情况下,mysql 将; 视为结束分隔符
    【解决方案2】:
    select count(1) into @cnt from table;
    if (@cnt > 10) then
       // do some stuff
    end if;
    

    你可以使用声明变量来代替@cnt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2018-12-21
      • 2018-09-12
      • 2019-11-18
      • 2017-11-14
      相关资源
      最近更新 更多