【发布时间】:2021-03-19 10:51:55
【问题描述】:
我正在重新访问我的数据库并注意到我有一些 INT 类型的主键。
这还不够独特,所以我想我应该有一个向导。 我来自微软 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 岁了,所以我希望有所改变?
【问题讨论】:
-
这还不够独特:主键在设计上是独一无二的。为什么您实际上要使用 guid 而不是自动递增的整数键?
-
正如我所说,它不够独特。我得到 1,2,3,4,5 等作为我的主键。这是我在从前端-后端发送请求时会使用的东西,所以我想要一些更独特的东西,这样一些不太有趣的意图就无法弄清楚 PK
-
@CodingLittle 值 1,2,3,4,5 仍然是唯一的,您没有任何重复值(唯一的定义)。但是,您仍然可以为 UUID 添加一个新列,并在您的
INSERT INTO查询中插入uuid()函数的值。 -
我从来没有说过它不是独一无二的我说从我的角度来看它在安全性方面不够独特。至于手动插入它是我询问是否可以在没有 tirggers 和手动插入的情况下获得生成的 guid 的问题的一部分
-
您将外部引用与内部密钥混淆了。
标签: mysql sql primary-key create-table uid