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でスレッドの実行状況を表示しスレッドの経過時間チェックや特定スレッドを強制終了する方法
データベースサーバが重たく、原因を調査する機会があった。サーバ自体のメモリやCP ...
-
-
MySQLでdatetime型データの〇日後を取得する方法(DATEDIFF)
MySQLでdatetime型データがあり、何日経過しているかを取得し、〇日経過 ...
-
-
MySQLでデータがあれば上書き、無ければ挿入する
既存のソースを編集時に「REPLACE INTO~~」 という見たことの無いSQ ...
-
-
mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...
-
-
MySQLでdatetime型のカラムから秒は省いて検索する方法
MySQLでdatetime型のカラムに対して「2022-10-07 10:30 ...