勉強したことのメモ

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で「server has gone~」というエラーの対応方法
MySQLで「server has gone~」というエラーの対応方法

MySQLで「MySQL server has gone away」というエラー ...

Ajaxで負荷軽減
Ajaxで負荷軽減

業務中、専用のページでfile_get_contents的なものは あまり使わな ...

PHPでキーや値は保持したまま順番を入れ替える
PHPでキーや値は保持したまま順番を入れ替える

PHPで連想配列のキーや値は保持したまま順番をランダムに入れ替えたかった。一発で ...

管理画面やダッシュボードとして便利そうなBootstrap系のテンプレート
管理画面やダッシュボードとして便利そうなBootstrap系のテンプレート

新規サイトの立ち上げでダッシュボード、管理画面を作る必要があった。小規模なサイト ...

PHPでCookie保存時にPartitioned属性を設定する方法
PHPでCookie保存時にPartitioned属性を設定する方法

あるページをブラウザの開発者ツールで見た際に「cookie partitione ...