Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql将列默认值设置为uuid

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
;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文