导入以前导出的mysql触发器时出错
我有一个mysql触发器一直在工作,我将其导出并删除,并试图将其放回,但我一直遇到以下错误:导入以前导出的mysql触发器时出错,mysql,triggers,Mysql,Triggers,我有一个mysql触发器一直在工作,我将其导出并删除,并试图将其放回,但我一直遇到以下错误: #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 12 我的触发器是: CREATE TRIGGER `accounts_tracking`
#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 12
我的触发器是:
CREATE TRIGGER `accounts_tracking` AFTER UPDATE ON `accounts`
FOR EACH ROW BEGIN
IF( NEW.`check_level` != OLD.`check_level` ) THEN
INSERT INTO `accounts_tracking` ( `change_type`, `account_id`, `field`, `old_int`, `new_int`, `old_time`, `new_time` )
VALUES
( "1",
OLD.id,
"check_level",
OLD.`check_level`,
NEW.`check_level`,
UNIX_TIMESTAMP(),
UNIX_TIMESTAMP());
END IF;
END
第12行是第2个UNIX#U时间戳()
我的表格结构如下:
CREATE TABLE `accounts_tracking` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`change_type` smallint(5) unsigned NOT NULL,
`account_id` int(10) unsigned NOT NULL,
`field` varchar(255) NOT NULL,
`old_int` int(11) NOT NULL,
`new_int` int(11) NOT NULL,
`new_time` int(10) unsigned NOT NULL,
`old_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
服务器类型:MySQL
服务器版本:5.1.73-log
谢谢。正如barranka在评论部分所建议的,您需要将此触发器用分隔符括起来,如下所示:
DELIMITER $$
CREATE TRIGGER `accounts_tracking` AFTER UPDATE ON `accounts`
FOR EACH ROW BEGIN
IF( NEW.`check_level` != OLD.`check_level`) THEN
INSERT INTO `accounts_tracking` ( `change_type`, `account_id`, `field`, `old_int`, `new_int`, `old_time`, `new_time` )
VALUES
( "1",
OLD.id,
"check_level",
OLD.`check_level`,
NEW.`check_level`,
UNIX_TIMESTAMP(),
UNIX_TIMESTAMP());
END IF;
END$$
DELIMITER ;
原因是,通过向语句中添加,实际上是在使用触发器本身创建。为了运行多个语句(如存储例程/过程中的语句),需要添加分隔符
在触发器中没有开始和结束的其他情况下,不需要分隔符。例如:
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
也许是一个愚蠢的问题,但您是否将触发器包含在
分隔符$$
(例如)和delimter之间代码>?@BK435正在尝试删除明显的。。。我看你已经把它作为一个answer@BK435它仍然需要知道它是否解决了OP问题;)是的,我不知道我在想什么。。。哦,好吧,谢谢:)谢谢,真不敢相信我错过了。