是否可以在没有触发器的情况下在mysql上生成guid并在mysql中进行手动插入?

问题描述 投票:2回答:2

我正在重新访问数据库,发现我有一些类型为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岁,所以我希望发生什么变化?

mysql sql primary-key create-table uid
2个回答
1
投票

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版本不足以对此进行测试。


0
投票

您可以制作一个

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需要触发器

© www.soinside.com 2019 - 2024. All rights reserved.