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で同一サーバーの異なるDB内のテーブルをJOINする
同一のMySQLサーバーでdb1データベースのtable1テーブルと、db2デー ...
-
MySQLでカラム内容によって条件分岐させたい場合の対応方法
MySQLでカラムの内容によって条件を分岐させたかった。またPHPで処理するので ...
-
WordPressでデータベース接続確立エラー発生時の対応方法
WordPressで「データベース接続確立エラー」というエラー表示がされた。大抵 ...
-
MySQLで「doesn't have a default value」エラーの対処
MySQLでINSERT時に「Field 'カラム名' doesn't have ...
-
ON DUPLICATE KEY UPDATE後にinsert_idを取得すると結果が0になる
MySQLでON DUPLICATE KEY UPDATE句指定し、データの登録 ...