mysql实现将列默认值设置为uuid
作者:nayi_224
在MySQL 8.1.0中建表时,主键和普通列都可以设置默认值,需要注意的是,使用UUID()函数时必须加上括号,否则会报错,修改时同样需要加括号,目前无法使用自定义函数作为默认值,MySQL也不支持,可以使用内置函数如LENGTH、CONCAT等,但若可能,应尽量避免使用触发器来设置默认值
使用mysql版本为8.1.0
建表时设置
create table test( uuid varchar(100) NOT NULL default (uuid()) , aaaa varchar(100) not null default (uuid()) , primary key(uuid) );
可以看到主键和普通列都可以设置,但是要注意uuid()要加上括号,否则会报错
修改时设置
ALTER TABLE test MODIFY uuid VARCHAR(36) DEFAULT (uuid()); ALTER TABLE test MODIFY aaaa VARCHAR(36) DEFAULT (uuid());
同样注意要添加括号
使用自定义函数
目前没有使用默认值的方式设置成功过,mysql好像不支持使用自定义函数作为默认值
CREATE FUNCTION custom_function_name()
RETURNS int
DETERMINISTIC
BEGIN
RETURN 1;
END;
ALTER TABLE test MODIFY aaaa VARCHAR(36) DEFAULT (custom_function_name());
会报错 3770 - Default value expression of column 'aaaa' contains a disallowed function: custom_function_name.
而使用其他内置函数,如length、concat等是可以的
这时应该只能使用触发器了,需要注意的是,在设置默认值时,只要能不使用触发器,就一定不要使用
CREATE FUNCTION custom_function_name()
RETURNS int
DETERMINISTIC
BEGIN
RETURN 1;
END;
create trigger tri_test_uuid
before insert on test
for each ROW
BEGIN
SET new.aaaa=custom_function_name();
END
;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
