Зверніть увагу, що UUID()повернення MySQL CHAR(36)та зберігання UUID у вигляді тексту (як показано в інших відповідях) є очевидно неефективним. Натомість стовпець повинен бути BINARY(16), і ви можете використовувати його UUID_TO_BIN()при вставці даних і BIN_TO_UUID()при зчитуванні їх назад.
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;
Зауважте, що оскільки MySQL насправді не знає, що це UUID, може бути важко вирішити проблеми з ним, що зберігається як двійковий файл. У цій статті пояснюється, як створити згенерований стовпець, який перетворюватиме UUID у текст за потреби, не займаючи місця та не турбуючись про синхронізацію окремих бінарних та текстових версій: https://mysqlserverteam.com/storing-uuid-values-in -mysql-таблиці /