mysql将列默认值设置为uuid

使用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
;

参考帖子https://forums.mysql.com/read.php?152,688554,688554#msg-688554

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值