如何 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 版本来测试它。
我重新访问我的数据库并注意到我有一些 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 版本来测试它。