使用mysql中的触发器生成字母数字员工ID?

时间:2014-03-06 07:12:22

标签: mysql triggers

你好朋友我想创建一个表员工

CREATE TABLE IF NOT EXISTS `employees` (
  `sno` int(11) NOT NULL AUTO_INCREMENT,
  `empcode` varchar(20) NOT NULL,
  `employeename` varchar(20) NOT NULL,
  `fathername` varchar(20) NOT NULL,
  `gender` varchar(6) NOT NULL,
  `dob` date NOT NULL,
  `contactno` varchar(12) NOT NULL,
  `address` varchar(100) NOT NULL,
  `city` varchar(20) NOT NULL,
  `state` varchar(20) NOT NULL,
  `branch` varchar(20) NOT NULL,
  `dateofjoining` date NOT NULL,
  PRIMARY KEY (`sno`),
  UNIQUE KEY `empcode` (`empcode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

并且我希望在employees表中按顺序在employees表中插入新记录时生成唯一的员工代码,例如CG000001 CG000002 ...等等使用mysql trigger但不能做我的逻辑是失败的,请帮帮我

1 个答案:

答案 0 :(得分:0)

使用after触发器,您无法访问已经刷新的NEW

您实际上需要before触发器。

create trigger bi_table_name before insert on employees
for each row begin
  set new.empcode = concat( 'CG' + LPAD( new.empcode, 6, 0 ) );
end;

如果您想要包含新生成的auto_incremented值,那么

create trigger bi_table_name before insert on employees
for each row begin
  set @auto_id := ( SELECT AUTO_INCREMENT 
                    FROM INFORMATION_SCHEMA.TABLES
                    WHERE TABLE_NAME='employees' AND TABLE_SCHEMA=DATABASE() ) 
  set new.empcode = concat( 'CG' + LPAD( @auto_id, 6, 0 ) );
end;

注意 的: 确保您没有任何具有相同名称和/或操作的预定义触发器。 如果有一些,则在创建新的之前删除它们。