嗨有没有人知道我应该如何创建一个触发器,它将从varchar和自动增量表创建一个唯一的id,包括来自用户输入的if else 我正在计划类似于下面的代码,但我收到错误1050表user_increment_table存在
DELIMITER ;
CREATE TRIGGER TG_ID
BEFORE INSERT ON userdatabase
FOR EACH ROW
BEGIN
if User_department like "HR"
then
INSERT INTO user_increment_table VALUES (NULL);
SET NEW.User_ID = CONCAT('HRU', LPAD(LAST_INSERT_ID(), 3, '0'));
Elseif U_role like "MARKETING"
then
INSERT INTO user_increment_table VALUES (NULL);
SET NEW.User_ID = CONCAT('MRK', LPAD(LAST_INSERT_ID(), 3, '0'));
END$$
DELIMITER ;
答案 0 :(得分:0)
尝试:
mysql> DROP TABLE IF EXISTS `user_increment_table`, `userdatabase`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `userdatabase` (
-> `User_ID` VARCHAR(6),
-> `User_department` VARCHAR(255),
-> `U_role` VARCHAR(255)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `user_increment_table` (
-> `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE TRIGGER `TG_ID` BEFORE INSERT ON `userdatabase`
-> FOR EACH ROW
-> BEGIN
-> IF NEW.`User_department` LIKE 'HR' THEN
-> INSERT INTO `user_increment_table` VALUES (NULL);
-> SET NEW.`User_ID` := CONCAT('HRU', LPAD(LAST_INSERT_ID(), 3, '0'));
-> ELSEIF NEW.`U_role` LIKE 'MARKETING' THEN
-> INSERT INTO user_increment_table VALUES (NULL);
-> SET NEW.`User_ID` := CONCAT('MRK', LPAD(LAST_INSERT_ID(), 3, '0'));
-> END IF;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> INSERT INTO `userdatabase` (`User_department`)
-> VALUES ('HR');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `userdatabase` (`U_role`)
-> VALUES ('MARKETING');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT
-> `User_ID`,
-> `User_department`,
-> `U_role`
-> FROM
-> `userdatabase`;
+---------+-----------------+-----------+
| User_ID | User_department | U_role |
+---------+-----------------+-----------+
| HRU001 | HR | NULL |
| MRK002 | NULL | MARKETING |
+---------+-----------------+-----------+
2 rows in set (0.00 sec)
请参阅db-fiddle。