web-dev-qa-db-fra.com

MySQL définit l'ID par défaut UUID

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.

4
Doghouse308

À 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.

8
fyrye

Si vous utilisez le type binaire (16), vous pouvez définir la valeur par défaut comme suit:

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