Cod*_*tle 3 mysql sql primary-key create-table uid
我重新访问了我的数据库并注意到我有一些 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;
Run Code Online (Sandbox Code Playgroud)
扳机:
CREATE TRIGGER `t_GUID` BEFORE INSERT ON `tbl_test`
FOR EACH ROW begin
SET new.GUID = uuid();
Run Code Online (Sandbox Code Playgroud)
或者,您必须自己在后端插入 guid。
我不是数据库专家,但仍然记得触发器会导致性能问题。
你可以做一个
INSERT INTO `tbl_test` VALUES (uuid(),'testname');
Run Code Online (Sandbox Code Playgroud)
当您调用它时,这将生成一个新的 uuid。
或者您也可以通过使用这些函数之一来使用现代uuid v4 ,而不是标准 uuid(),它比 mysql 中的 uuid 更随机
从8.0.13开始就可以使用
CREATE TABLE t1 (
uuid_field VARCHAR(40) DEFAULT (uuid())
);
Run Code Online (Sandbox Code Playgroud)
但是你想要的不仅仅是独特的,但这里只允许内部函数,而不是用户定义的 uuid v4,为此你需要 trogger
就文档中所述,您可以将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
);
Run Code Online (Sandbox Code Playgroud)
这几乎是从文档中复制的。我手头没有足够新的 MySQL 版本来测试这个。
| 归档时间: |
|
| 查看次数: |
5228 次 |
| 最近记录: |