首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中不使用触发器和手动插入在insert上生成/自动增量guid?

问如何在mysql中不使用触发器和手动插入在insert上生成/自动增量guid?
EN

Stack Overflow用户
提问于 2020-04-21 17:43:57
回答 2查看 16.9K关注 0票数 4

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

这还不够独特,所以我想我会有一个吉德。我来自microsoft背景,在ssms中,您可以选择类型为“uniqe标识符”并自动递增它。

但是,在mysql中,我发现您必须为要为其生成指南id的表在insert上执行触发器。示例:

表:

代码语言:javascript
复制
CREATE TABLE `tbl_test` (
  `GUID` char(40) NOT NULL,
  `Name` varchar(50) NOT NULL,
  PRIMARY KEY (`GUID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

触发器:

代码语言:javascript
复制
CREATE TRIGGER `t_GUID` BEFORE INSERT ON `tbl_test`
 FOR EACH ROW begin
 SET new.GUID = uuid();

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

Im不是DB专家,但仍然记得触发会导致性能问题。

以上是我发现的这里,9岁,所以我希望有什么改变?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-21 18:02:32

就在文件中说明而言,您可以使用uid()作为列默认启动版本8.0.13,因此类似的内容应该可以工作:

代码语言:javascript
复制
create table tbl_test (
    guid binary(16) default (uuid_to_bin(uuid())) not null primary key,
    name varchar(50) not null
);

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

票数 18
EN

Stack Overflow用户

发布于 2020-04-21 18:00:07

你可以做一个

代码语言:javascript
复制
INSERT INTO  `tbl_test` VALUES  (uuid(),'testname');

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

或者您也可以使用现代的uuid v4,方法是使用这些函数之一,而不是标准的uuid(),后者比mysql中的uuid更随意。

如何在UUIDv4中生成MySQL?

您可以使用自8.0.13

代码语言:javascript
复制
CREATE TABLE t1 (
    uuid_field     VARCHAR(40) DEFAULT (uuid())
);

但是您想要的不仅仅是惟一的,这里是只允许内部函数而不是定义为uuid v4的用户,因此您需要木马程序。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61349754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档