我正在重新访问数据库,发现我有一些类型为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岁,所以我希望发生什么变化?
就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版本不足以对此进行测试。
您可以制作一个
INSERT INTO `tbl_test` VALUES (uuid(),'testname');
这将在您调用它时生成一个新的uuid。
或者您也可以通过使用以下功能之一代替标准的uuid()来使用现代的uuid v4,该标准的uuid()比mysql中的uuid更随机
How to generate a UUIDv4 in MySQL?
自8.0.13起可以使用
CREATE TABLE t1 (
uuid_field VARCHAR(32) DEFAULT (uuid())
);
但是您想要的不仅仅是唯一的,但这里是仅允许使用的内部函数,而不是用户定义的uuid v4,因为uuid需要触发器