如何 generate/autoincrement 在 mysql 中不使用触发器和手动插入时插入 guid?

How to generate/autoincrement guid on insert without triggers and manual inserts in mysql?

我重新访问我的数据库并注意到我有一些 INT 类型的主键。

这不够独特,所以我想我会有一个指南。 我来自微软 sql 背景,在 ssms 中你可以 选择类型 "uniqeidentifier" 并自动递增。

但在 mysql 中,我发现您必须为您想要的表创建在插入时执行的触发器 为生成指南 ID。示例:

Table:

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 岁了所以我希望有什么改变?

你可以做一个

INSERT INTO  `tbl_test` VALUES  (uuid(),'testname');

这会在您调用它时生成一个新的 uuid。

或者您也可以使用这些函数之一代替标准 uuid() 来使用现代 uuid v4,它比 mysql

中的 uuid 更随机

您可以使用,因为 8.0.13

CREATE TABLE t1 (
    uuid_field     VARCHAR(40) DEFAULT (uuid())
);

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

至于 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 版本来测试它。