10.7 预览特性:UUID 数据类型
通用唯一标识符 (UUID) 在计算领域已经非常普遍。一个 128 位的值,具有文本表示形式,并通过规定多种版本类型来确保唯一性,使其成为一种理想的数据类型。
在 UUID 数据类型作为一项特性请求在 MDEV-4958 中存在多年、并缓慢积累投票和关注者之后,我们很高兴地宣布 UUID 数据类型的预览版。与 INET6 数据类型类似,它使用了 MariaDB 10.5 中的数据类型插件 API。
UUID 数据类型是什么样的?
CREATE TABLE t1 (id UUID) INSERT INTO TABLE t1 VALUES ('123e4567-e89b-12d3-a456-426655440000')
因此,在很大程度上,它看起来像一个字符串。你可以 CAST(转换)到它
SELECT CAST('123e4567-e89b-12d3-a456-426655440000' AS UUID) 123e4567-e89b-12d3-a456-426655440000
如果你有 BINARY(16) 数据字符串,它们也可以被 CAST(转换)为 UUID
SELECT CAST(x'102030405000000000000000adcefeff' AS UUID) 10203040-5000-0000-0000-0000adcefeff
通过这些基本的转换规则,你可以使用以下方法将现有的 CHAR/VARCHAR/TEXT 十六进制文本或 BINARY/VARBINARY/BLOB 编码的数据迁移到 UUID:
CREATE TABLE t1 (id BINARY(16)); ALTER TABLE t1 MODIFY COLUMN id UUID;
这也适用于复制;主库/从库可以是这些不同的类型,并且它会进行转换。
像所有数据类型一样,你可以设置默认值
CREATE TABLE t1 ( c1 UUID DEFAULT 0x00000000000000000000000000000000, c2 UUID DEFAULT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, c3 UUID DEFAULT '00000000-0000-0000-0000-000000000000', c4 UUID DEFAULT 'ffffffff-ffff-ffff-ffff-ffffffffffff', c5 UUID DEFAULT CAST(X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' AS UUID) );
同样,如果格式不正确,你会收到警告
SELECT CAST('longlive-that-bear-a456-426655440000' AS UUID); NULL SHOW WARNINGS; Level Code Message Warning 1292 Incorrect uuid value: 'longlive-that-bear-a456-426655440000'
该数据类型的元数据也是一个 uuid 类型的字符串。
$ mariadb --column-type-info --execute "SELECT UUID()" Field 1: `UUID()` Catalog: `def` Database: `` Table: `` Org_table: `` Type: STRING (type=uuid) Collation: utf8mb3_general_ci (33) Length: 108 Max_length: 36 Decimals: 39 Flags: +--------------------------------------+ | UUID() | +--------------------------------------+ | 3ca2cd9a-15c9-11ec-9351-3c58c2a5ca80 | +--------------------------------------+
如何亲自尝试 10.7 UUID 数据类型预览版?
我们准备了三种方法供你尝试此特性。
Tarball 包
前往 Tarball 下载页面
容器
你可以运行名为 quay.io/mariadb-foundation/mariadb-dev:10.7-mdev-4958-uuid 的容器,其界面与 Docker Library mariadb 镜像相同。这里我使用了 podman 来运行容器,并在容器中运行 mariadb 命令行
$ podman run --rm -d -e MARIADB_USER=bob \ -e MARIADB_PASSWORD=entry -e MARIADB_DATABASE=uuidtest \ -e MARIADB_RANDOM_ROOT_PASSWORD=1 \ --name mariadb-uuid \ quay.io/mariadb-foundation/mariadb-devel:10.7-mdev-4958-uuid feab2044def356e03e594e6604fed8f29037c3aafdd10bbcbcf82abca4866f74 $ podman exec -ti mariadb-uuid mariadb -u bob -pentry uuidtest Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.7.0-MariaDB-MDEV-4958-uuid mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [uuidtest]> create table uuidtest ( id uuid not null primary key default(uuid())); Query OK, 0 rows affected (0.016 sec) MariaDB [uuidtest]> insert into uuidtest values (),(),(),(),(); Query OK, 5 rows affected (0.020 sec) Records: 5 Duplicates: 0 Warnings: 0 MariaDB [uuidtest]> select * from uuidtest; +--------------------------------------+ | id | +--------------------------------------+ | fd08a402-16c0-11ec-a724-7e502e50dded | | fd08a9f6-16c0-11ec-a724-7e502e50dded | | fd08ab9f-16c0-11ec-a724-7e502e50dded | | fd08abfe-16c0-11ec-a724-7e502e50dded | | fd08ac3d-16c0-11ec-a724-7e502e50dded | +--------------------------------------+ 5 rows in set (0.001 sec)
Binder 在线 MariaDB Jupyter Notebook
通过 Binder,你可以在网页浏览器中获得一个完整的运行实例。请耐心等待链接加载,这需要一点时间。
欢迎反馈
如果你在此特性预览版中遇到任何问题、设计缺陷或不符合预期的边缘情况,请在 MDEV 项目上通过 JIRA 提交错误报告/特性请求,告知我们。欢迎在 Zulip 上讨论。