MYSQL触发器在插入,更新时复制整行

时间:2016-10-07 07:23:07

标签: mysql mysql-error-1064

我有两个表,即admin_user,admin_user_bak 表admin_user的结构是

CREATE TABLE IF NOT EXISTS `admin_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(150) NOT NULL,
  `name` varchar(150) NOT NULL,
  `emailid` varchar(150) NOT NULL,
  `password` varchar(150) NOT NULL,
  `roll` varchar(50) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `last_login` datetime NOT NULL,
  `status` enum('active','inactive') NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

表的结构admin_user_bak包含admin_user的所有字段,另外还有字段bak_user_id。它的自动增量ID ..

CREATE TABLE IF NOT EXISTS `admin_user_bak` (
  `bak_user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `user_name` varchar(150) NOT NULL,
  `name` varchar(150) NOT NULL,
  `emailid` varchar(150) NOT NULL,
  `password` varchar(150) NOT NULL,
  `roll` varchar(50) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `last_login` datetime NOT NULL,
  `status` enum('active','inactive') NOT NULL,
  PRIMARY KEY (`bak_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这里我的触发器是

CREATE TRIGGER ins_admin_user BEFORE UPDATE ON admin_user
  FOR EACH ROW
  BEGIN

    INSERT INTO admin_user_bak (user_id,user_name,name,emailid,password,roll,created,modified,last_login,status) VALUES ( NEW.user_id, NEW.user_name, NEW.emailid, new.password, NEW.roll, NEW.created, NEW.modified, NEW.last_login, NEW.status);

  END

我的目的是想要备份所有活动。插入特定记录的更新删除。不是所有记录。我写插入。它不起作用 任何想法..谢谢

1 个答案:

答案 0 :(得分:0)

我想要一个插入触发器但你在触发器上写了更新,所以它不起作用。

您使用 INSERT ON

CREATE TRIGGER ins_admin_user BEFORE INSERT ON admin_user
  FOR EACH ROW
  BEGIN

    INSERT INTO admin_user_bak (user_id,user_name,name,emailid,password,roll,created,modified,last_login,status) VALUES ( old.user_id, old.user_name, old.emailid, old.password, old.roll, old.created, old.modified, old.last_login, old.status);

  END