我正在重新访问数据库,并注意到我有一些类型为INT的主键。
这还不够独特,所以我想我会有个向导。 我来自Microsoft sql背景,在ssms中可以 选择类型为“ uniqeidentifier”并自动递增。
但是在mysql中,我发现必须为要插入的表创建在插入时执行的触发器 为其生成指南ID。示例:
表格:
CREATE TABLE `tbl_test` (
`GUID` char(40) NOT NULL,
`Name` varchar(50) NOT NULL,
PRIMARY KEY (`GUID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
触发:
CREATE TRIGGER `t_GUID` BEFORE INSERT ON `tbl_test`
FOR EACH ROW begin
SET new.GUID = uuid();
或者,您必须将GUID自己插入后端。
我不是数据库专家,但仍然记得触发器会导致性能问题。
上面是我发现的here,已经9岁了,所以我希望情况有所变化?
答案 0 :(得分:3)
就stated in the documentation而言,您可以使用uid()
作为默认版本8.0.13开始的列,因此这样的方法应该起作用:
create table tbl_test (
guid binary(16) default (uuid_to_bin(uuid())) not null primary key,
name varchar(50) not null
);
这几乎是从文档中复制的。我手头的MySQL版本不足以对此进行测试。
答案 1 :(得分:2)
您可以制作
CREATE TABLE t1 (
uuid_field VARCHAR(40) DEFAULT (uuid())
);
调用它会生成一个新的uuid。
或者您也可以通过使用以下功能之一来使用现代的uuid v4而不是标准的uuid(),后者比mysql中的uuid更随机
How to generate a UUIDv4 in MySQL?
您可以从8.0.13起使用
{{1}}
但是,您不仅需要独特的功能,而且这里是仅允许使用的内部功能,而不是用户定义的uuid v4,因为您需要使用触发器