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

标签 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

最佳答案

(借自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/

相关文章:

PHP自定义SQL类,通过数组将输出数据传递给另一个函数

c++ - 未定义模板的隐式实例化 'class'

mysql - 使用 iBatis 调用存储过程

c# - 从 WPF 执行存储过程

sql - 如果引用 ID 为 NULL,则递归获取父 ID

mysql - 将表从一个数据库复制到另一个数据库的最简单方法?

php - mysql innodb db varbinary 的正确索引类型是什么?

php - 使用 PHP + AJAX 同时从两个 MySQL 表中获取数据

Javascript 模态窗口例程每次点击都会执行更多时间

c - 获取存储回调的函数