MySQL 5.7, 8.0.12 y anteriores
MySQL a partir de 5.7 u 8.0.12 no admite el uso de una función o expresión como valor predeterminado de una columna.
https://dev.mysql.com/doc /refman/5.7/en/tipo-de-datos-predeterminados.html
La alternativa sería usar un disparador para monitorear el BEFORE INSERT
de la tabla deseada.
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 ;
Esto cambiará el valor predeterminado de un INSERT
declaración al uuid()
valor, a menos que se haya definido explícitamente.
MySQL 8.0.13 y posteriores
Con el lanzamiento de MySQL 8.0.13 ahora se puede usar una expresión como valor predeterminado, siempre que esté entre paréntesis.
Ejemplo db<>fiddle
https://dev.mysql.com/doc /refman/8.0/en/tipo-de-datos-predeterminados.html