今天在改别人的一个代码中发现一个问题,要创建一个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
运行项目后成功解决了