J'essaie de créer des tables dans une base de données dont le champ id remplit l'id avec un UUID par défaut.
J'ai essayé quelque chose comme:
CREATE TABLE FOO (
id CHAR(36) PRIMARY KEY DEFAULT uuid()
);
J'apprécie grandement votre aide.
À partir de la version 5.7, MySQL ne prend pas en charge l’utilisation d’une fonction comme valeur par défaut d’une colonne.
La clause de valeur DEFAULT dans une spécification de type de données indique une valeur par défaut pour une colonne. À une exception près, la valeur par défaut doit être une constante; cela ne peut pas être une fonction ou une expression.
https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html
L’autre solution consisterait à utiliser un déclencheur pour surveiller le BEFORE INSERT
de la table souhaitée.
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 ;
Cela modifiera la valeur par défaut d'une instruction INSERT
en la valeur uuid()
, sauf si elle a été explicitement définie.
Si vous utilisez le type binaire (16), vous pouvez définir la valeur par défaut comme suit:
unhex(replace(uuid(),'-',''))