Si noti che i UUID()ritorni di MySQL CHAR(36)e la memorizzazione degli UUID come testo (come mostrato nelle altre risposte) è ovviamente inefficiente. Invece, la colonna dovrebbe essere BINARY(16), e puoi usarla UUID_TO_BIN()quando inserisci i dati e BIN_TO_UUID()quando li rileggi.
CREATE TABLE app_users
(
app_user_id SMALLINT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
api_key BINARY(16)
);
CREATE TRIGGER before_insert_app_users
BEFORE INSERT ON app_users
FOR EACH ROW
IF new.api_key IS NULL
THEN
SET new.api_key = UUID_TO_BIN(UUID());
END IF;
Nota che poiché MySQL non sa davvero che questo è un UUID, può essere difficile risolvere i problemi con esso memorizzato come binario. Questo articolo spiega come creare una colonna generata che convertirà l'UUID in testo secondo necessità senza occupare spazio o preoccuparsi di mantenere sincronizzate versioni binarie e di testo separate: https://mysqlserverteam.com/storing-uuid-values-in -mysql-tabelle /