我尝试在数据库中创建表,该数据库具有一个id字段,默认情况下会使用UUID填充id。
我尝试过类似的事情:
CREATE TABLE FOO (
id CHAR(36) PRIMARY KEY DEFAULT uuid()
);
非常感谢您的帮助。
答案 0 :(得分:8)
MySQL 5.7之后的版本不支持使用函数作为列的默认值。
数据类型规范中的DEFAULT值子句指示列的默认值。除了一个例外,默认值必须是常量; 它不能是函数或表达式。
https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html
另一种方法是使用触发器来监控所需表格的BEFORE INSERT
。
DELIMITER ;;
CREATE TRIGGER `foo_before_insert`
BEFORE INSERT ON `foo` FOR EACH ROW
BEGIN
IF new.id IS NULL THEN
SET new.id = uuid();
END IF;
END;;
DELIMITER ;
这会将INSERT
语句的默认值更改为uuid()
值,除非已明确定义。
答案 1 :(得分:0)
如果使用binary(16)作为类型,则可以将默认值设置如下:
unhex(replace(uuid(),'-',''))
答案 2 :(得分:0)
对于 Mysql 8 及以上版本,答案在; Can I use a function for a default value in MySql?
CREATE TABLE t1 ( 'uuid_field' VARCHAR(32) DEFAULT (uuid());