MySQL set default id UUID

僤鯓⒐⒋嵵緔 提交于 2019-12-09 13:09:27

问题


I'm trying to create tables in a database that has an id field that will populate the id with an UUID by default.

I tried something like:

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

I greatly appreciate your assistance.


回答1:


MySQL as of 5.7 does not support using a function as the default value of a column.

The DEFAULT value clause in a data type specification indicates a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression.

https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html

The alternative would be to use a trigger to monitor the BEFORE INSERT of the desired table.

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 ;

This will change the default value of an INSERT statement to the uuid() value, unless it has been explicitly defined.




回答2:


If you use binary(16) as the type, you can set the default as follows:

unhex(replace(uuid(),'-',''))


来源:https://stackoverflow.com/questions/46134550/mysql-set-default-id-uuid

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!