你好朋友我想创建一个表员工
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
但不能做我的逻辑是失败的,请帮帮我
答案 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;
注意强> 的: 确保您没有任何具有相同名称和/或操作的预定义触发器。 如果有一些,则在创建新的之前删除它们。