MySQL设置默认ID为UUID

时间:2017-09-09 19:49:57

标签: mysql uuid

我尝试在数据库中创建表,该数据库具有一个id字段,默认情况下会使用UUID填充id。

我尝试过类似的事情:

CREATE TABLE FOO (
  id CHAR(36) PRIMARY KEY DEFAULT uuid()
);

非常感谢您的帮助。

3 个答案:

答案 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());