Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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,我正在尝试创建一个触发器。首先,我创建了employees表和employees\u audit表: CREATE TABLE employees ( employeeNumber int(11) NOT NULL, lastName varchar(50) NOT NULL, firstName varchar(50) NOT NULL, extension varchar(10) NOT NULL, email varchar(100) NOT NULL, offic

我正在尝试创建一个触发器。首先,我创建了employees表和employees\u audit表:

CREATE TABLE employees (
  employeeNumber int(11) NOT NULL,
  lastName varchar(50) NOT NULL,
  firstName varchar(50) NOT NULL,
  extension varchar(10) NOT NULL,
  email varchar(100) NOT NULL,
  officeCode varchar(10) NOT NULL,
  reportsTo int(11) default NULL,
  jobTitle varchar(50) NOT NULL,
  PRIMARY KEY  (employeeNumber)
)

 CREATE TABLE employees_audit ( 
 id int(11) NOT NULL AUTO_INCREMENT, 
 employeeNumber int(11) NOT NULL, 
 lastname varchar(50) NOT NULL, 
 changedon datetime DEFAULT NULL, 
 action varchar(50) DEFAULT NULL, 
 PRIMARY KEY (id) 
 ) 
然后我创建了触发器:

DELIMITER $$
 CREATE TRIGGER before_employee_update 
 BEFORE UPDATE ON employees
 FOR EACH ROW BEGIN
 INSERT INTO employees_audit
 SET action = 'update',
 employeeNumber = OLD.employeeNumber,
 lastname = OLD.lastname,
 changedon = NOW(); END$$
 DELIMITER ;
第一个表和第二个表都被创建,但当我执行触发器时 我犯了一个错误

#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 before_employee_update
BEFORE UPDATE ON employe' at line 1 

我的代码中有错误吗?或者我需要另一个MySQL版本吗?

您是从phpMyAdmin运行这个版本的吗?如果是这样,分隔符应该设置在SQL文本区域下方的字段中,而不是文本区域本身


没有。与已删除的答案相反,没有
分隔符$$
之后需要code>,因为这样会将分隔符设置为
$$

好吧,我知道你做错了什么。请参见下面的执行:

mysql>  CREATE TABLE employees_audit (
->  id int(11) NOT NULL AUTO_INCREMENT,
->  employeeNumber int(11) NOT NULL,
->  lastname varchar(50) NOT NULL,
->  changedon datetime DEFAULT NULL,
->  action varchar(50) DEFAULT NULL,
->  PRIMARY KEY (id)
->  )
->
-> DELIMITER $$
->  CREATE TRIGGER before_employee_update
->  BEFORE UPDATE ON employees
->  FOR EACH ROW BEGIN
->  INSERT INTO employees_audit
->  SET action = 'update',
->  employeeNumber = OLD.employeeNumber,
->  lastname = OLD.lastname,
->  changedon = NOW(); END$$
错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便在“DELIM”附近使用正确的语法 ITER$$

按了门铃?看起来相似吗?

伙计,你(很可能)忘了放一个
位于create table指令的末尾。以下代码有效:

    mysql>
    mysql>  CREATE TABLE employees_audit (
        ->  id int(11) NOT NULL AUTO_INCREMENT,
        ->  employeeNumber int(11) NOT NULL,
        ->  lastname varchar(50) NOT NULL,
        ->  changedon datetime DEFAULT NULL,
        ->  action varchar(50) DEFAULT NULL,
        ->  PRIMARY KEY (id)
        ->  );
    Query OK, 0 rows affected (0.09 sec)

    mysql>
    mysql> DELIMITER $$
    mysql>  CREATE TRIGGER before_employee_update
        ->  BEFORE UPDATE ON employees
        ->  FOR EACH ROW BEGIN
        ->  INSERT INTO employees_audit
        ->  SET action = 'update',
        ->  employeeNumber = OLD.employeeNumber,
        ->  lastname = OLD.lastname,
        ->  changedon = NOW(); END$$
    Query OK, 0 rows affected (0.01 sec)

    mysql>  DELIMITER ;

旧答案

试试这个

缺少
结束之后
,我猜,

编辑:固定的时间间隔


编辑1:重新回答。

不,应该没有
此处。仍在获取错误分隔符$$CREATE TRIGGER before\u employee\u update before update FOR employees每行开始插入到employees\u审核集操作='update',employeeNumber=OLD.employeeNumber,lastname=OLD.lastname,changedon=NOW();完;$$定界符;MySQL说:文档#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解第行“DELIMITER$$CREATE TRIGGER before_employee_update before update ON employees”附近使用的正确语法1@G-拉詹德拉更新了答案@是的。刚刚演示过,删除了我的旧答案。我已经更新了我的答案。看起来你忽略了一些琐碎的事情。
DELIMITER $$
 CREATE TRIGGER before_employee_update BEFORE UPDATE ON employees
 FOR EACH ROW 
 BEGIN
   INSERT INTO employees_audit
   SET action = 'update',
   employeeNumber = OLD.employeeNumber,
   lastname = OLD.lastname,
   changedon = NOW(); 
 END;$$
 DELIMITER ;