需求:如果表中有一些敏感字段,为了安全性和更方便业务上的处理,一般禁止使用自增id作为数据关联字段。
1、先建个测试表zq_test。
create table zq_test (c_id int,c_name varchar(100),c_number int
);insert into zq_test values(1,'aaa',111);
insert into zq_test values(2,'bbb',222);
2、然后再新建一个表字段c_uuid
alter table zq_test add column c_uuid varchar(36) not null;
3、执行好后,表有了这个字段,但是没数据。再执行下面这个语句。
update zq_test set c_uuid = uuid();
有一个注意事项就是使用uuid()这个函数必须mysql8.0以上,可以使用select version();进行查看。
此时你的表有了c_uuid的数据,并且也是独一无二的值,但是你想再没增加一条数据时就实现这个列的数据自动生成,这个时候就需要使用到触发器了。
5、你可以先在左侧导航栏,zq_test表下面,点击到触发器,右键新建触发器generate_uuid。好了以后,在源中编写代码。
有个注意点是你需要把自动添加的源中的代码after 改成 before
如果你的目的是在数据插入、更新等操作发生时,对即将要插入或更新的数据行进行修改,例如给某个字段设置值(像前面为 c_uuid字段设置 UUID 值的场景),那应该将触发器的类型修改为 BEFORE 触发器。BEFORE触发器是在实际的插入、更新等操作执行之前被触发,这样你就可以通过 NEW 关键字来访问和修改即将要操作的数据行的内容了
在最后面添加一段代码
beginset new.c_uuid = UUID();
end
我把源中的完整代码也写上。
CREATE TRIGGER generate_uuid
BEFORE INSERT
ON zq_test FOR EACH ROW
BEGINSET new.c_id = UUID();
END;
6、然后点击保存执行。执行成功后使用下面语句试试
insert into zq_test(c_id,c_name,c_number) values(3,'ccc',333);select * from zq_test
此时c_uuid列应该已经实现了数据的自动添加。