首先,需要先创建一个表,SQL语句如下:
CREATE TABLE traveller(
id VARCHAR(50) PRIMARY KEY,-- 要设置默认值为UUID()的主键
NAME VARCHAR(32),
sex VARCHAR(20),
phoneNum VARCHAR(20),
credentialsType INT,
credentialsNum VARCHAR(50),
travellerType INT
在创建完表之后,需要创建一个触发器,从而将主键的默认值设定为UUID()生成的字符串。
在创建好的触发器中编写的代码如下:
DELIMITER $$
CREATE
TRIGGER `ssm`.`id_trigger` -- 触发器名称
BEFORE INSERT -- 触发器被触发的时机
ON `ssm`.`traveller` -- 触发器所作用的表名称
FOR EACH ROW BEGIN
SET new.id=REPLACE(UUID(),'-',''); -- 触发器执行的逻辑
END$$
DELIMITER ;
对于触发器的编写做以下总结:
create trigger ssm
.id_trigger
中 ssm
.id_trigger
为触发器名称,可任意指定。
触发器被触发的时机:在使用 insert/delete/update 这三种SQL语句对于指定表进行操作之前或之后(before/after)。
在于语句中的表现: BEFORE INSERT ON ssm
.traveller
即是在对ssm
.traveller
表进行 insert 操作之前 触发器被触发。
触发器的执行逻辑:在 begin 和 end 之间的SET new.id = replace(UUID(),’-’,’’); ,即指定新的id值为: UUID()函数生成的字符串中的 ‘-’ 被替换为 ‘’ 之后的字符串。
在触发器设定好之后,对于traveller表执行以下语句:
INSERT INTO
traveller(NAME,sex,phoneNum,credentialsType,credentialsNum,travellerType)
VALUES('jay','男','13222222222',0,'1234567890026',0);
所得到的的结果为:
若触发器中所写逻辑为:
SET new.id=UUID();
插入后的结果应为:
从以上对比中,可以知道这两种不同逻辑的区别。
最后要知道该问题解决后所带来的优点和缺点:
优点:使用UUID()函数生成的唯一标识来作为默认id值,使得用户的 id 更加安全。
缺点:UUID()函数所生成的唯一标识过长,在高并发情况下影响效率,一般在该场景下不推荐使用。