什么是错误?

DELIMITER $$

CREATE TRIGGER `Task_insert_trig` AFTER INSERT ON `task`
FOR EACH ROW
begin
declare userID int;

Set userID =(select  userID from assigned_task where Atk_Task_Id = new.Tsk_Id and Atk_Project_Id = new.Tsk_Project_Id);
insert into dashboard_event set
Dsh_Project_Id = new.Tsk_Project_Id,
Dsh_Actor = userID,
Dsh_Action = 'Assign',
Dsh_Type = 'Task',
Dsh_Target = new.Tsk_Id,
Dsh_Date = now();
$$
end
DELIMITER ;

错误代码:1064
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,在第12行的“”附近使用正确的语法
错误代码:1064
您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,以获得在'end'附近使用的正确语法
第1行的分隔符'

最佳答案

END必须在$$之前。
这在MySql 5.5.28中可以通过将分隔符设置为|来实现。
作为一个补充,我真的建议为了可读性而整理代码——这不是一个大问题,但是有些关键字是大写的,有些不是,有些东西是用``包装的,有些不是,也没有缩进。
我个人也更喜欢事物的全称-任务而不是Tsk等,当你看到缩略词到处都是,当全称会更清楚的时候变得很糟糕。大声嚷嚷。

CREATE TABLE assigned_task (
  Atk_Task_Id INT NOT NULL,
  Tsk_Project_Id INT NOT NULL);

CREATE TABLE dashboard_event (
  Dsh_Project_Id INT NOT NULL,
  Dsh_Actor INT NOT NULL,
  Dsh_Action CHAR(100) NOT NULL,
  Dsh_Type CHAR(100) NOT NULL,
  Dsh_Target INT NOT NULL,
  Dsh_Date DATETIME);

CREATE TABLE Task (
  Tsk_Id INT NOT NULL,
  Tsk_Project_Id INT NOT NULL);

CREATE TRIGGER Task_insert_trig AFTER INSERT ON Task
  FOR EACH ROW BEGIN

  SET @userID = (
    SELECT userID
    FROM assigned_task
    WHERE Atk_Task_Id = new.Tsk_Id
      AND Atk_Project_Id = new.Tsk_Project_Id
    LIMIT 1);

  INSERT INTO dashboard_event (
    Dsh_Project_Id,
    Dsh_Actor,
    Dsh_Action,
    Dsh_Type,
    Dsh_Target,
    Dsh_Date)
  VALUES (
    new.Tsk_Project_Id,
    @userID,
    'Assign',
    'Task',
    new.Tsk_Id,
    NOW());
END

关于mysql - 如何在触发器中声明变量并将其与mysql一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3176763/

10-11 14:40
查看更多