MySQL - Modifica la tabella per inserire automaticamente un UUID


14

Ok, lo so di averlo fatto prima. Ma non posso per la vita di me capirlo. Ho creato una tabella. Una delle colonne è etichettata "LogID", è anche la chiave primaria.

Come posso modificarlo in modo che questa colonna generi un UUID per ogni nuova voce?

Grazie

Risposte:


17

Basta creare un trigger da eseguire prima di inserire per generare l'UUID per la colonna specificata.

CREATE TRIGGER before_insert_mytable
  BEFORE INSERT ON mytable
  FOR EACH ROW
  SET new.LogID = uuid();

3

L' espressione UUID () genera un UUID quando viene chiamato.

Sfortunatamente (comunque AFAIK) MySQL non consentirà espressioni come valore predefinito per un campo. Per ovviare a questo problema, è sempre possibile impostare il campo su null predefinito e disporre di un trigger che aggiorna il campo con un UUID al momento dell'inserimento.


2

Sono abbastanza sicuro che non puoi ancora , in realtà. Considererei seriamente di non utilizzare un UUID come chiave primaria, invece di utilizzare un tipo di dati più sottile e più bello come INT. Puoi aggiungere il tuo UUID come colonna separata e aggiornarlo tramite un TRIGGER, se ti va bene.


I numeri interi vengono suddivisi se è necessario che i record siano univoci nel database.
Cfreak,

1
Sospetto che esista un modello più ampio o un problema di scelta dello strumento se i requisiti dettano il modello di stoccaggio del motore a quel livello. Avere l'UUID come colonna separata è in realtà la migliore soluzione di entrambi i mondi in questo caso.
Avarkx,

UUID si gonfia una volta formattato per l'uomo. Se si desidera utilizzare un UUID come chiave primaria, quindi rimuovere i trattini e decomprimerlo. Se è necessaria la versione in formato umano, è possibile aggiungere una colonna generata alla tabella. SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= 16 byte binari. Ancora più grande di INTma molto meglio diVARCHAR(36)
miknik il

Pessimo consiglio, Miknik. Il database si ridimensionerà terribilmente se si utilizza un UUID come chiave primaria. Potrebbe anche avere 16 colonne intere separate come chiave primaria composta. E indice frammentazione a bizzeffe! La tua chiave primaria ora è casuale. In tal caso, non utilizzare chiavi esterne. I join cambiano da O (n) a O (n ^ 2). Due join da O (n log10 (n)) a O (n ^ 3). Sostituisci n con 100.000 e sottrai la differenza.
TamusJRoyce,

2

Ho appena deciso di includere il comando UUID () sull'inserto dalla mia applicazione.

Ringrazia tutti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.