MySQL - змінити таблицю для автоматичного введення UUID


14

Гаразд, я знаю, що робив це раніше. Але я все життя не можу це зрозуміти. Я створив таблицю. Один із стовпців має позначку "LogID", це також первинний ключ.

Як змінити його, щоб цей стовпець генерував UUID для кожного нового запису?

Дякую

Відповіді:


17

Просто створіть тригер для запуску перед вставкою, щоб створити UUID для даного стовпця.

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

3

UUID () вираз генерує UUID при виклику.

На жаль (все-таки AFAIK) MySQL не дозволить вирази як значення за замовчуванням для поля. Як обхід, ви завжди можете встановити поле за замовчуванням і мати тригер, який оновлює поле на UUID на вставці.


2

Я впевнений, що ви все ще не можете . Я б серйозно подумав не використовувати UUID в якості основного ключа, натомість використовувати більш тонкий, приємний тип даних, як-от INT. Ви можете додати свій UUID як окремий стовпець та оновити його через TRIGGER, якщо це вам підходить.


Цілі особи розбиваються, якщо вам потрібні записи, щоб бути унікальними у вашій базі даних.
Cfreak

1
Я б підозрював, що існує більша модель моделі або обраний інструмент, якщо вимоги диктують схему зберігання двигуна на цьому рівні. В цьому випадку UUID є окремим стовпцем - найкраще рішення для обох світів.
Аваркс

Одночасно відформатований для людей, UUID роздувається. Якщо ви хочете використовувати UUID в якості первинного ключа, то зніміть тире та зніміть його. Якщо вам потрібна версія, відформатована людиною, ви можете додати генерований стовпець до таблиці. SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= 16 байт двійкових. Ще більший за, INTале набагато кращий заVARCHAR(36)
miknik

Погана порада, miknik. Ваша база даних буде жахливо масштабуватися, якщо ви використовуєте UUID в якості основного ключа. Також може бути 16 окремих цілих стовпців як складний первинний ключ. І калорійність фрагментації! Ваш основний ключ тепер випадковий. У цьому випадку не використовуйте сторонні ключі. Приєднання змінюються від O (n) до O (n ^ 2). Два з'єднання від O (n log10 (n)) до O (n ^ 3). Замініть n на 100 000 і відніміть різницю.
TamusJRoyce

2

Щойно я вирішив включити команду UUID () до вставки зі своєї програми.

Дякую усім.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.