mysql - 如何在没有触发器和手动插入的情况下在插入时生成/自动增加 guid mysql?

Cod*_*tle 3 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;
Run Code Online (Sandbox Code Playgroud)

扳机:

CREATE TRIGGER `t_GUID` BEFORE INSERT ON `tbl_test`
 FOR EACH ROW begin
 SET new.GUID = uuid();
Run Code Online (Sandbox Code Playgroud)

或者,您必须自己在后端插入 guid。

我不是数据库专家,但仍然记得触发器会导致性能问题。

以上是我在这里找到的东西,已经 9 岁了,所以我希望有什么改变?

nbk*_*nbk 8

你可以做一个

INSERT INTO  `tbl_test` VALUES  (uuid(),'testname');
Run Code Online (Sandbox Code Playgroud)

当您调用它时,这将生成一个新的 uuid。

或者您也可以通过使用这些函数之一来使用现代uuid v4 ,而不是标准 uuid(),它比 mysql 中的 uuid 更随机

如何在 MySQL 中生成 UUIDv4?

从8.0.13开始就可以使用

CREATE TABLE t1 (
    uuid_field     VARCHAR(40) DEFAULT (uuid())
);
Run Code Online (Sandbox Code Playgroud)

但是你想要的不仅仅是独特的,但这里只允许内部函数,而不是用户定义的 uuid v4,为此你需要 trogger


GMB*_*GMB 6

文档中所述,您可以将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
);
Run Code Online (Sandbox Code Playgroud)

这几乎是从文档中复制的。我手头没有足够新的 MySQL 版本来测试这个。