mysql表中怎么将主键的类型设置为UUID

今天在改别人的一个代码中发现一个问题,要创建一个uuid类型的主键

CREATE TABLE `product` (
  `id` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `productNum` VARCHAR(50) NOT NULL,
  `productName` VARCHAR(50) DEFAULT NULL,
  `cityName` VARCHAR(50) DEFAULT NULL,
  `DepartureTime` TIMESTAMP NULL DEFAULT NULL,
  `productPrice` DECIMAL(10,0) DEFAULT NULL,
  `productDesc` VARCHAR(255) DEFAULT NULL,
  `productStatus` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

想把上面表中的product中的id改成uuid类型的

uuid

   UUID含义是通用唯一识别码 (Universally Unique Identifier)uuid 项目应用 www.1b23.com,指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。换句话说能够在一定的范围内保证主键id的唯一性
   mysql中直接使用uuid()函数,可以生成一个随机的uuid
   正常的uuid是36位长度的,例如:d48644cc-2c7a-4714-9900-18ab99e80b03,其中有4个字符是”-“,在mysql中可以使用replace()函数来替换”-“

replace函数

默认生成的uuid含有’-’,我们可以使用replace函数替换掉’-’,SQL如下:

select replace(uuid(),"-","") as uuid;

百度后发现可以通过触发器来实现这一操作

在左侧创建一个触发器
在这里插入图片描述
名为id_trigger
下面是触发器的代码

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `ssm_project1`.`id_trigger` BEFORE INSERT
    ON `ssm_project1`.`product`
    FOR EACH ROW BEGIN
		SET new.id=REPLACE(UUID(),'-','');
    END$$

DELIMITER ;

该触发器实现的是在插入数据时生成一个唯一的uuid
运行项目后成功解决了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/he1234555/article/details/114012854