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
答案 0 :(得分:0)
(借鉴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 ;
我用它来处理我必须为现有模式生成一些种子数据的情况(例如,我无法更改模式)。 请注意我在开发环境中使用它 - 不知道这样的高性能或其他具有生产价值的东西。希望有能力的dba可以提供更多的洞察力 - 但是既然问题出现了,我就遇到了类似的问题,找不到替代方案,希望这会有助于其他人......