MySQLでINSERT時にオートインクリメントではないカラムに連番を登録する方法
MySQLでINSERT時にオートインクリメントではないカラムに連番を登録したい。またデータ未登録の際は「NULL」や「0」ではなく「1」を登録したい。以下に対応方法をメモ。
データベース構造
mysql> SHOW COLUMNS FROM `test_table`; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | order | int | NO | | NULL | | +-------+--------------+------+-----+---------+----------------+
orderカラムに対して連番を登録したい。
対応方法
ソースコード
INSERT INTO `test_table`
(`order`, `name`)
SELECT COALESCE(MAX(`order`) + 1, 1), "鈴木"
FROM `test_table`;
注意点
データベース構造からすると「name」→「order」の順で書きたいところだけど、そうするとシンタックスエラー(MySQL 1064エラー)になる。そのため「order」を頭に持ってくること。
リファレンス
COALESCE
https://dev.mysql.com/doc/refman/8.0/ja/comparison-operators.html#function_coalesce
MAX
https://dev.mysql.com/doc/refman/8.0/ja/aggregate-functions.html#function_max
関連記事
-
-
サイズが大きめのMySQLデータをレンタルサーバに移行する方法
お名前.comのレンタルサーバにそこそこ大きいサイズのMySQLデータを移行した ...
-
-
Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...
-
-
MySQLでdatetime型にもインデックスを使用して高速化を図る方法
ログ関連のデータを格納するテーブルがあり、集計を行う際に非常に時間がかかった。レ ...
-
-
MySQLにてUUIDを発行しプライマリキー(主キー)にする方法
普段MySQLでプライマリキー(主キー)を使う場合、オートインクリメントを利用し ...
-
-
MySQLでSELECT時に数値を3桁ずつのカンマ区切りに変換する方法
MySQLで商品価格のような数値の値を3桁ずつのカンマ区切りで取り出したいという ...