MySQLにてUUIDを発行しプライマリキー(主キー)にする方法
普段MySQLでプライマリキー(主キー)を使う場合、オートインクリメントを利用した連番IDを発行することが多い。ただ、連番ではなくランダムな英数字を設定したいケースがあった。衝突は避けたいので以前メモしたPHPでUUIDを発行しようかと思いきやMySQL側のみで対応できるみたい。以下に対応方法をメモ。
テーブル構造
mysql> SHOW COLUMNS FROM `test_table`; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | uuid | char(36) | NO | PRI | NULL | | | name | varchar(255) | NO | | NULL | | +-------+--------------+------+-----+---------+-------+
対応方法
SQL文
INSERT INTO `test_table`
(`uuid`, `name`)
VALUES
(UUID(), '鈴木'),
(UUID(), '佐々木'),
(UUID(), '山田');
結果
mysql> TABLE `test_table`; +--------------------------------------+-----------+ | uuid | name | +--------------------------------------+-----------+ | 2966346f-a8a2-11ef-867f-00135d131a34 | 鈴木 | | 2966a280-a8a2-11ef-867f-00135d131a34 | 佐々木 | | 2966a609-a8a2-11ef-867f-00135d131a34 | 山田 | +--------------------------------------+-----------+
解説等
「UUID()」でバージョン1のUUIDが生成される。
また、結果のTABLE文だけどMySQL8.0.19から導入された構文で「SELECT * FROM `test_table`」と同じ結果が返ってくる。ただ、WHEREが利用できない点に注意。
所感
MySQLだけで完結できるのは助かる。尚、連番IDだと数値によるソートができたが、UUIDだとできないため生成日時(登録日時)も保存しておいた方が無難かと思われる。
リファレンス
UUID()
https://dev.mysql.com/doc/refman/8.0/ja/miscellaneous-functions.html#function_uuid
TABLEステートメント
関連記事
-
-
MySQLで全文検索(フルテキストインデックス)を使用する方法
普段利用しているサイトに検索用のテキストボックスがあり、そこに何らかのワードを入 ...
-
-
MySQLのview(ビュー)で仮想的なテーブルを作成する方法
MySQL関連のサイトを見ているとview(ビュー)が云々という記事を見かけた。 ...
-
-
MySQLでカラム数の異なるテーブルを結合する(UNION)
MySQLでカラム数の異なるテーブル同士をUNIONで結合させたかった。ただ、何 ...
-
-
MySQLで苗字(姓)と名前(名)のカラムを結合させ検索する方法
MySQLで名字(姓)と名前(名)をそれぞれ別カラムに格納しているデータベースが ...
-
-
MySQLでデータベース単位とテーブル単位のデータサイズ(容量)の調べ方
VPSの各種ファイルを整理している際に「MySQLも不要なデータを削除すればいい ...