勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLでINSERT時にオートインクリメントではないカラムに連番を登録する方法

  MySQL データベース

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 データベース

  関連記事

MySQLでデータベース単位とテーブル単位のデータサイズ(容量)の調べ方

VPSの各種ファイルを整理している際に「MySQLも不要なデータを削除すればいい ...

MySQLで月別に集計を行う。あと日付時刻関数。

現在進行形でやっているデータ集計系だけど 新たな発見があったのでメモ。 ■日付時 ...

MySQLでIPアドレスを数値として入れると変な値になる場合の対処方法

MySQLでIPアドレスをINET_ATON関数を用いてINT型に変換し格納する ...

MySQLで歯抜けになっているint型の数値を取得する

MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...

SortableJSを使ってデータの並べ替え&保存

あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...