CREATE TABLE `user` (
`user_id` varchar(16) NOT NULL,
`person_id` varchar(16) NOT NULL,
`org_id` varchar(16) NOT NULL,
`email` varchar(32) NOT NULL,
`login_id` varchar(10) NOT NULL,
`password` varchar(32) NOT NULL,
`mobile_no` varchar(12) NOT NULL,
`android_id` varchar(16) NOT NULL,
`activation_status` int(2) NOT NULL,
`pin` varchar(6) NOT NULL,
`role_id` varchar(16) NOT NULL,
`imei` varchar(16) NOT NULL,
`booth_id` varchar(16) NOT NULL,
`Assignment_id` varchar(16) NOT NULL,
`created_by` varchar(16) DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
`updated_by` varchar(16) DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
最佳答案
(借自How to make MySQL table primary key auto increment with some prefix)
假设您已经创建了用户表,您可以编写 trigger自动为您生成 id。您需要一个虚拟表来保存 MySQL 自动生成的 ID,从而使触发器可以轻松地从中提取新的唯一 ID。
虚拟(序列)表:
CREATE TABLE user_seq
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
触发器:
DELIMITER $$
CREATE TRIGGER tg_user_insert
BEFORE INSERT ON user
FOR EACH ROW
BEGIN
INSERT INTO user_seq VALUES (NULL);
SET NEW.user_id = LAST_INSERT_ID();
END$$
DELIMITER ;
我用它来处理我必须为现有模式生成一些种子数据的情况(例如,我无法更改模式)。 请注意,我在开发环境中使用它 - 不知道这样的性能或其他生产值(value)如何。希望有能力的 dba 可以提供更多见解 - 但由于问题存在,我遇到了类似的问题,并且找不到替代方案,希望这会帮助其他人......
关于mysql - 我想创建一个 mysql 触发器来创建主键作为 varchar autoincrement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987822/