Zwróć uwagę, że UUID()zwroty MySQL CHAR(36)i przechowywanie identyfikatorów UUID w postaci tekstu (jak pokazano w innych odpowiedziach) jest oczywiście nieefektywne. Zamiast tego kolumna powinna być BINARY(16)i możesz jej użyć UUID_TO_BIN()podczas wstawiania danych i BIN_TO_UUID()podczas ich ponownego odczytu.
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;
Zwróć uwagę, że ponieważ MySQL tak naprawdę nie wie, że jest to identyfikator UUID, może być trudno rozwiązać problemy z nim przechowywane jako binarne. W tym artykule wyjaśniono, jak utworzyć wygenerowaną kolumnę, która w razie potrzeby przekonwertuje identyfikator UUID na tekst bez zajmowania miejsca lub martwienia się o synchronizację oddzielnych wersji binarnych i tekstowych: https://mysqlserverteam.com/storing-uuid-values-in -mysql-tabele /