2017-06-12 58 views
0

嗨有谁知道我应该如何创建一个触发器,将创建一个唯一的id从varchar和自动增量表,包括如果其他从用户输入 我正在计划类似于下面的东西代码,但我得到一个错误1050台user_increment_table存在触发器创建与if else语句的varchar自动增量

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

实际上犯了一个错误IF和ELSEIF有相同的输入。他们两个都是User_department – VmTech

回答

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

+0

我今天会试试,让你知道! – VmTech

+0

感谢一百万人完美工作。 5星:-) – VmTech