【问题标题】:MYSQL SELECT INSERT inside Trigger触发器内的MYSQL SELECT INSERT
【发布时间】:2015-11-06 21:08:55
【问题描述】:
    delimiter //
CREATE TRIGGER trig AFTER INSERT ON table0 FOR EACH ROW 
BEGIN
    CREATE TEMPORARY TABLE temp (SELECT t1.col1,t1.Col2,t2.col3,t3.col4,t4.col5 FROM (table1 AS t1 JOIN table2 AS t2 ON t1.col1 = t2.col3... etc) WHERE t1.condition = NEW.condition);
    INSERT INTO table5 VALUES (NULL,CURRENT_TIMESTAMP(),0,0,NULL,NULL,NULL,NEW.condition,   SELECT GROUP_CONCAT("\"",someColumn - 1,",",50,",",someColumn2,",",30,",",someColumn3,"\"" SEPARATOR ';') FROM temp);
    DROP temp;
END;//
delimiter ;

现在是错误

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'SELECT CONCAT("\"",someColumn - 1,",",50,",",someColumn2,",",30,", ",someColu' 在第 4 行

它在 someColumn3 的 someColu 处被切断

感谢您的宝贵时间。

【问题讨论】:

  • 您遇到的错误是什么?
  • 请提供所面临的确切错误信息。
  • 为什么要在触发器中创建临时表?
  • 在我看来,从 INSERT 中省略字段列表通常是不好的风格;并且非常糟糕的形式发布带有此类插入的问题而不提供表格的此类信息(在这种情况下为tableZ)。
  • 您可以尝试在您的插入语句中将 "\"" 更改为 '"' 吗?

标签: mysql select triggers insert


【解决方案1】:

您似乎错过了行分隔符。您需要添加它们。

delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
    IF NEW.amount < 0 THEN
        SET NEW.amount = 0;
    ELSEIF NEW.amount > 100 THEN
        SET NEW.amount = 100;
    END IF;
END;//
delimiter ;

必须将分隔符更改为 ';' 以外的其他内容以便执行不会在创建触发器语句的中间终止。

在这里,我们将在创建触发器之前将分隔符更改为“//”并将其更改回“;”马上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 2015-09-18
    • 2020-06-15
    • 2014-05-08
    • 2013-08-28
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多