MySQLですべてのテーブルのカラム名を一括で小文字に変更する方法
MySQLでは、INFORMATION_SCHEMA.COLUMNS を利用することで、データベース内のすべてのテーブルのカラム名をまとめて小文字に変換できます。ここでは、CONCAT 関数を使って ALTER TABLE 文を自動生成し、カラム名を小文字に書き換える手順を解説します。
カラム名を小文字に変更する基本構文
まず、対象となるSQLの構文は以下の通りです。
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `',
LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') AS anyAliasName
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'yourDatabaseName';このクエリは、指定したデータベース内のすべてのカラムに対して、「元のカラム名を小文字に置き換えるALTER TABLE文」を文字列として生成します。'yourDatabaseName' の部分は、実際に操作したいデータベース名に置き換えてください。
サンプルデータベースの準備
今回は、2つのテーブルを持つデータベース「bothinnodbandmyisam」を例に説明します。このデータベースには以下のテーブルが存在します。
- employee(従業員テーブル)
- student(学生テーブル)
employeeテーブルの構造
employeeテーブルの構造を確認してみましょう。
mysql> desc employee;
出力結果は以下の通りです。EmployeeId と EmployeeName という、大文字を含むカラムがあることがわかります。
+--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | EmployeeId | int(11) | YES | | NULL | | | EmployeeName | varchar(30) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
studentテーブルの構造
続いて、studentテーブルの構造も確認します。
mysql> desc student;
出力結果は以下の通りです。こちらにも StudentId と StudentName という大文字を含むカラムがあります。
+-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | StudentId | int(11) | YES | | NULL | | | StudentName | varchar(20) | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
すべてのカラム名を小文字に変更するクエリの実行
それでは、両テーブルのカラム名を小文字に変更するためのALTER TABLE文を生成するクエリを実行します。
mysql> SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `',
-> LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') AS changeColumnNameToLower
-> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'bothinnodbandmyisam';実行すると、更新後のカラム名が反映されたALTER TABLE文が以下のように出力されます。
+------------------------------------------------------------------------+ | changeColumnNameToLower | +------------------------------------------------------------------------+ | ALTER TABLE employee CHANGE `EmployeeId` `employeeid` int(11); | | ALTER TABLE employee CHANGE `EmployeeName` `employeename` varchar(30); | | ALTER TABLE student CHANGE `StudentId` `studentid` int(11); | | ALTER TABLE student CHANGE `StudentName` `studentname` varchar(20); | +------------------------------------------------------------------------+ 4 rows in set (0.00 sec)
生成されたALTER TABLE文の適用方法
出力された各行はそのまま実行可能なSQL文です。これらをコピーして実行すれば、実際にカラム名が小文字に変更されます。
テーブル数やカラム数が多い場合は、出力結果をファイルに書き出してから一括実行すると便利です。例えば、INTO OUTFILE 句を使ってSQLファイルとして保存したり、mysqlクライアントの出力をリダイレクトして流し込む方法があります。
mysql -N -e "SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `', LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'bothinnodbandmyisam';" yourDatabaseName > alter_statements.sql
mysql yourDatabaseName < alter_statements.sqlまとめ
上記のサンプル出力を見ると、employee・student両テーブルのすべてのカラム名が小文字(employeeid、employeename、studentid、studentname)に変換されていることが確認できます。
この手法を使えば、テーブルやカラムが多数あるデータベースでも、手作業で一つずつ修正することなく、効率的にカラム名を統一できます。命名規則の整理やシステム移行時のカラム名正規化などにぜひ活用してください。
-
単一クエリでMySQLのすべてのカラム名を小文字に変換する方法
データベース運用において、テーブル内のカラム名の大文字・小文字表記が混在していると、可読性や保守性の面で問題が生じることがあります。本記事では、information_schema を活用した単一のクエリで、MySQLデータベース内のすべてのカラム名を小文字に変換するためのALTER TABLE文を自動生成する方法を解説します。1. サンプルテーブルの作成まず、動作確認用のサンプルテーブルを作成します。ここでは、大文字と小文字が混在したカラム名を持つテーブルを用意します。mysql> create table DemoTable1 ->
-
MySQLで1つのテーブルからすべてのレコードを別のテーブルにコピーする方法(CREATE TABLE AS SELECT活用術)
MySQLでは、CREATE TABLE AS SELECTステートメントを使うことで、既存テーブルのすべてのレコードを簡単に新しいテーブルへコピーできます。この記事では、実際のSQL例とともにその手順をわかりやすく解説します。 CREATE TABLE AS SELECTステートメントとは CREATE TABLE AS SELECTは、SELECT文の実行結果をもとに新しいテーブルを作成する構文です。元テーブルの構造とデータをまとめて複製できるため、テーブルのバックアップやデータ移行の際に非常に便利です。 サンプルテーブルの作成 まず、コピー元となるテーブルを作成しましょう。 mys