Problema UUID()

di il
2 risposte

Problema UUID()

Ciao a tutti,
ho creato una tabella che vorrei venisse indicizzata tramite uuid().

CREATE TABLE REVISIONE
(
	ID_REVISIONE		        VARCHAR(36) PRIMARY KEY,
	PROGETTO			INT NOT NULL,
	NOME_REVISIONE		VARCHAR(6),
	NOME_UTENTE			VARCHAR(255),
	MOTIVAZIONE			TEXT,
	CONSTRAINT REVISIONE_FK FOREIGN KEY (PROGETTO) REFERENCES PROGETTO (ID_PROGETTO)
)

;

CREATE TRIGGER
GENERA_NUOVO_ID_REVISIONE
BEFORE INSERT ON
REVISIONE
FOR EACH ROW
SET NEW.ID_REVISIONE = NEW.UUID()
;
Avviando lo script mi genera correttamente sia tabella che trigger ma, quando provo a inserire un nuovo record all'interno della tabella mi risponde:
Error Code: 1364. Field 'ID_REVISIONE' doesn't have a default value
Qualcuno può aiutarmi?

2 Risposte

  • Re: Problema UUID()

    Ciao,
    credo manchi solo l'opzione default su la primary key. L'esempio sotto indicato funziona correttamente:

    CREATE TABLE `tb4` (
      `id_rev` varchar(50) NOT NULL DEFAULT '',
      `progetto` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id_rev`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    create trigger init_uuid before insert on tb4
    for each row set new.id_rev=uuid();
    
    insert into tb4 (progetto) values ('dddd')
    
    Ciao
    Mik
  • Re: Problema UUID()

    Nel trigger c'è un NEW di troppo:
    CREATE TRIGGER
    GENERA_NUOVO_ID_REVISIONE
    BEFORE INSERT ON
    REVISIONE
    FOR EACH ROW
    SET NEW.ID_REVISIONE = UUID()
    ;

    Ma comunque credo che ti darà errore ugualmente. Nella INSERT, dovresti assegnare un valore al campo ID_REVISIONE. Ho capito che il trigger modifica questo valore prima ancora dell'inserimento, ma MySQL controlla la correttezza della tua query prima di eseguirla, e se pensa che non stai dando un valore alla chiave primaria si arrabbia.
Devi accedere o registrarti per scrivere nel forum
2 risposte