你好 friend ,我想创建一个员工表
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 ;
当我按照员工表中的顺序在员工表中插入新记录时,我想生成唯一的员工代码,例如CG000001
CG000002
...所以使用mysql trigger
但无法执行我的逻辑,每次都会失败,请帮助我
最佳答案
使用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;
注意: 确保您没有任何具有相同名称和/或操作的预定义触发器。 如果有的话,那么在创建新的之前删除它们。
关于mysql - 使用mysql中的触发器生成字母数字员工ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217586/