MySQL-テーブルを変更して自動的にUUIDを入れる


14

わかりました、私はこれを前にしたことを知っています。しかし、私はそれを理解することはできません。テーブルを作成しました。列の1つは「LogID」というラベルが付けられており、主キーでもあります。

この列が新しいエントリごとにUUIDを生成するように変更するにはどうすればよいですか?

ありがとう

回答:


17

挿入するに実行するトリガーを作成して、特定の列のUUIDを生成します。

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

3

UUID()式と呼ばれるUUIDを生成します。

残念ながら(とにかく)MySQLは、フィールドのデフォルト値として式を許可しません。回避策として、フィールドを常にデフォルトのnullに設定し、挿入時にUUIDでフィールドを更新するトリガーを使用できます。


2

私はかなり確信しているあなたはまだできません実際には、。UUIDを主キーとして使用せ、代わりに、よりスリムで優れたデータ型を使用することを真剣に検討しINTます。UUIDを別の列として追加しTRIGGER、必要に応じてを介して更新できます。


レコードがデータベース全体で一意である必要がある場合、整数は分割されます。
クリーク

1
要件がそのレベルのエンジンストレージパターンを決定している場合、より大きなモデル設計または選択したツールの問題があると思われます。この場合、UUIDを別の列として持つことは、実際には両方の世界のベストソリューションです。
Avarkx

UUIDは、人間用にフォーマットされると肥大化します。UUIDを主キーとして使用する場合は、ダッシュを削除して16進数から16進数に戻します。人間形式のバージョンが必要な場合は、生成された列をテーブルに追加できます。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)への2つの結合。nを100,000に置き換えて、差を引​​きます。
TamusJRoyce

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.