MySQLですべての行のあるフィールドから別のフィールドへデータをコピーする方法
MySQLであるフィールド(カラム)の値を、同じテーブル内の別のフィールドへ全行まとめてコピーしたい場合、UPDATE文を使用します。WHERE句を付けずにUPDATEを実行すれば、テーブル内のすべての行が更新対象になります。
この記事では、実際にテーブルを作成し、データを挿入してから、あるカラムの値を別のカラムへ一括コピーする手順を具体的なSQLとともに解説します。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。ここでは「学生ID」「学生名」「点数」の3つのカラムを持つテーブルを用意します。
mysql> create table DemoTable
(
StudentId int,
StudentFirstName varchar(20),
StudentMarks int default 0
);
Query OK, 0 rows affected (0.49 sec)StudentMarksカラムにはデフォルト値として0を設定しているため、INSERT時に値を指定しなければ自動的に0が入ります。
2. INSERT文でレコードを挿入する
次に、INSERTコマンドを使ってテーブルにレコードを追加します。
mysql> insert into DemoTable(StudentId,StudentFirstName) values(89,'Larry'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(35,'Robert'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(48,'Chris'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(78,'David'); Query OK, 1 row affected (0.61 sec)
3. SELECT文で現在のデータを確認する
SELECTコマンドでテーブルの中身を表示し、現状を確認しておきましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。まだStudentMarksはすべて0になっています。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 89 | Larry | 0 | | 35 | Robert | 0 | | 48 | Chris | 0 | | 78 | David | 0 | +-----------+------------------+--------------+ 4 rows in set (0.00 sec)
4. UPDATE文でフィールド間のデータを一括コピーする
ここが本題です。以下のようにSET句で「コピー先 = コピー元」と指定したUPDATE文を実行すると、すべての行に対してStudentIdの値がStudentMarksへコピーされます。
mysql> update DemoTable set StudentMarks=StudentId; Query OK, 4 rows affected (0.34 sec) Rows matched: 4 Changed: 4 Warnings: 0
WHERE句を指定しないため、テーブル内の全行(この例では4行)が更新対象となり、「Changed: 4」と表示されていることから全行が正常に更新されたことがわかります。
5. 更新結果を確認する
最後に、すべての行が正しく更新されたかどうかをSELECT文で確認しましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。各行のStudentMarksに、対応するStudentIdの値がコピーされています。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 89 | Larry | 89 | | 35 | Robert | 35 | | 48 | Chris | 48 | | 78 | David | 78 | +-----------+------------------+--------------+ 4 rows in set (0.00 sec)
注意点
- WHERE句なしのUPDATEは全行が対象になります。特定の行だけ更新したい場合は、必ずWHERE句で条件を指定してください。
- 本番環境で大量データを更新する前に、バックアップやトランザクション(BEGIN〜COMMIT)を活用すると安全です。
- コピー元とコピー先のカラムは、互換性のあるデータ型である必要があります。
このように、UPDATE文のSET句に別のカラム名を指定するだけで、追加のツールや複雑な処理なしに、全行のフィールド間データコピーを簡単に行うことができます。
-
【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)
MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi