Обратите внимание, что MySQL UUID()
возвращает 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-таблицы /