我正在尝试向 MySql 8.0.17 中的现有表添加一列。该列需要包含 UUID,我正在尝试将其设置为默认值。
这是我正在执行的语句
ALTER TABLE myTable ADD COLUMN UUID varchar(36) NOT NULL DEFAULT (UUID());
但是我收到以下错误
错误代码:1674。语句不安全,因为它使用的系统函数可能会在从站上返回不同的值。
我从其他帖子中读到,可以在表上创建触发器,但是我想知道是否可以将其直接设置为列上的默认值。
另外,使用 UUID 的二进制转换比仅使用简单的 UUID 有什么优势?
Eg.
ALTER TABLE myTable ADD COLUMN UUID binary(16) NOT NULL DEFAULT (UUID_TO_BIN(UUID(), true));
感谢您的帮助。
指派UUID()
因为 DEFAULT 值不起作用,因为它不能保证在您的副本上生成相同的值。这就是为什么使用 TRIGGER 是新记录(插入)的好选择。
如果您还想更新当前记录,则可以编写更新语句
update myTable
set UUID = UUID()
您的专栏属于类型binary(16)
这意味着 UUID 数据被隐式转换为二进制。使用UUID_TO_BIN
不需要。
EDIT:
CHAR/VARCHAR 是人类可读的格式。而二进制是紧凑格式。
这意味着将 32 个字符(带分隔符的 36 个或更多)压缩为 16 位格式或恢复为人类可读的格式。
如果你不介意读取UUID,最好是使用二进制格式
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)