如何在没有触发器的情况下在MySQL上生成/自动递增GUID?

时间:2020-04-21 17:43:57

标签: mysql sql primary-key create-table uid

我正在重新访问数据库,并注意到我有一些类型为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岁了,所以我希望情况有所变化?

2 个答案:

答案 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,因为您需要使用触发器