我想创建一个mysql触发器来创建主键作为varchar autoincrement

时间:2014-02-24 12:29:43

标签: mysql function stored-procedures triggers

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

1 个答案:

答案 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可以提供更多的洞察力 - 但是既然问题出现了,我就遇到了类似的问题,找不到替代方案,希望这会有助于其他人......

相关问题