2014-02-24 48 views
1
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

varchar和autoincrement?链接是什么?怎么样? –

+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能提供更多的见解 - 但自问题出现,我有类似的问题,并找不到替代方案,希望这可以帮助别人...