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

标签 mysql triggers

你好 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/

相关文章:

MySQL文件导入

mysql - 如何用 MYSQL 优化这些指令(每行的子查询)?

mysql - 这个符号是什么意思 := in sql

mysql - 从更新更改触发器期间进行的历史更新中保存最后更新的 ID 和日期

mysql - 插入前触发器的语法

mysql - MySQL联接3个表没有行合并

mysql - 替换在 mysql 和 mariadb 中不起作用的正则表达式

css - jQuery Mobile - 触发后加载 MyCss

mysql - 如果值已更改,则使用触发器插入行

sql - PL/SQL更新触发错误