Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入以前导出的mysql触发器时出错_Mysql_Triggers - Fatal编程技术网

导入以前导出的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`

我有一个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` 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问题;)是的,我不知道我在想什么。。。哦,好吧,谢谢:)谢谢,真不敢相信我错过了。