触发以跟踪MySQL数据库中的更改

Jam*_*ams 5 mysql sql triggers mysql-error-1064

我似乎无法创建一个触发器.我已经尝试了以下两种方式进行更新.我一直在使用insert语句获得语法错误.我在过去4小时内搜索了论坛和网络搜索,没有任何变化.这有很多代码,它基本上重复了一遍.任何帮助,将不胜感激.谢谢.我正在运行MySQL 5.0并通过phpMyAdmin 2.8.2.4作为Administrator/Root进行访问.


尝试1(在所有字段和名称上有和没有qoutes)

CREATE TRIGGER insert_classes
AFTER insert ON Classes
FOR EACH ROW
BEGIN
    insert into insert_tracking_classes (classID, Title, classDesc, Category, isEvent, picLeft, picTop, picRight, picBottom, prnColor, modified)
    values(NEW.classID, NEW.Title, NEW.classDesc, NEW.Category, NEW.isEvent, NEW.picLeft, NEW.picTop, NEW.picRight, NEW.picBottom, NEW.prnColor, NOW());
END;

CREATE TRIGGER insert_classes
AFTER insert ON Classes
FOR EACH ROW
BEGIN
insert into insert_tracking_classes
        set classID = NEW.classID,
        Title = NEW.Title,
        classDesc = NEW.classDesc,
        Category = NEW.Category,
        isEvent = NEW.isEvent,
        picLeft = NEW.picLeft,
        picTop = NEW.picTop,
        picRight = NEW.picRight,
        picBottom = NEW.picBottom,
        prnColor = NEW.prnColor,
        modified = NOW(); 
END;
Run Code Online (Sandbox Code Playgroud)

错误

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line * (at the end of the insert/values statement)
Run Code Online (Sandbox Code Playgroud)

尝试2

 DELIMITER $$
 CREATE TRIGGER insert_classes AFTER insert ON Classes
 FOR EACH ROW BEGIN
insert into insert_tracking_classes (classID, Title, classDesc, Category, isEvent, picLeft, picTop, picRight, picBottom, prnColor, modified)
values(NEW.classID, NEW.Title, NEW.classDesc, NEW.Category, NEW.isEvent, NEW.picLeft, NEW.picTop, NEW.picRight, NEW.picBottom, NEW.prnColor, NOW());
 END$$
 DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

错误

    SQL query:

    DELIMITER $$ CREATE TRIGGER insert_classes AFTER INSERT ON Classes
    FOR EACH
    ROW BEGIN
    INSERT INTO insert_tracking_classes( classID, Title, classDesc, Category, isEvent, picLeft, picTop, picRight, picBottom, prnColor, modified )
    VALUES (
-->     NEW.classID, NEW.Title, NEW.classDesc, NEW.Category, NEW.isEvent, NEW.picLeft, NEW.picTop, NEW.picRight, NEW.picBottom, NEW.prnColor, NOW( )
    );

    MySQL said: Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
         CREATE TRIGGER insert_classes AFTER insert ON Classes
         F' at line 1 
Run Code Online (Sandbox Code Playgroud)

我的桌子

CREATE TABLE insert_tracking_classes (  --- Same table layout for Classes table minus Modified time and tracking_id
  tracking_id int(11) NOT NULL AUTO_INCREMENT,
  classID int(11) NOT NULL,
  Title varchar(48) NOT NULL,
  classDesc text,
  Category varchar(128) default NULL,
  isEvent int(8) default NULL,
  picLeft int(8) default NULL,
  picTop int(8) default NULL,
  picRight int(8) default NULL,
  picBottom int(8) default NULL,
  prnColor varchar(4) default NULL,
  modified datetime NOT NULL,
  PRIMARY KEY (tracking_id)
);
Run Code Online (Sandbox Code Playgroud)

更新:尝试使用静态值并删除if和modified = NOW()语句而不做任何更改.

Jam*_*ams 5

不得不删除Delimiter,Begin和End语句.


回答

DROP TRIGGER IF EXISTS insert_classes;
CREATE TRIGGER insert_classes AFTER insert ON Classes
FOR EACH ROW
insert into tracking_classes (command, classID, Title, classDesc, Category, isEvent, picLeft, picTop, picRight, picBottom, prnColor, modified)
values('insert', NEW.classID, NEW.Title, NEW.Desc, NEW.Category, NEW.isEvent, NEW.picLeft, NEW.picTop, NEW.picRight, NEW.picBottom, NEW.prnColor, NOW());
Run Code Online (Sandbox Code Playgroud)