问题
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