UUID作为MySQL id列的默认值

时间:2020-09-22 05:56:15

标签: mysql uuid

我试图在MySql 8.0.17中的现有表中添加一列。该列需要包含一个UUID,我正在尝试将其设置为默认值。

这是我正在执行的语句

ALTER TABLE myTable ADD COLUMN UUID varchar(36) NOT NULL DEFAULT (UUID());

但是我遇到以下错误

错误代码:1674。语句是不安全的,因为它使用的系统函数可能会在从站上返回不同的值。

我从其他帖子中了解到可以在表上创建触发器,但是我想了解是否可以将其直接设置为列上的默认值。

而且,相对于简单的UUID,使用UUID的二进制转换有什么优势?

例如

ALTER TABLE myTable ADD COLUMN UUID binary(16) NOT NULL DEFAULT (UUID_TO_BIN(UUID(), true));

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

UUID()设置为DEFAULT值将不起作用,因为它不能保证在副本上会生成相同的值。这就是为什么使用TRIGGER是新记录(插入)的好选择的原因。

如果您还打算更新当前记录,则可以编写一条更新语句

update myTable
set UUID = UUID()

您的列的类型为binary(16),这意味着UUID数据被隐式转换为二进制。不需要使用UUID_TO_BIN

编辑:

CHAR / VARCHAR是人类可读的格式。二进制是紧凑格式。 这意味着将32个字符(带分隔符的36个或更多字符)压缩为16位格式或恢复为可读格式。

如果您不介意阅读UUID,最好使用二进制格式

相关问题