MySQLを使った株価データが少し大きくなりました。爺のPCが非力なもので、テーブルから一部抽出した内容を、別データベースの同名テーブルとしてつくる、という段取りの備忘録です。Micrsoft:Copilotによりスマートになる方法を教えてもらいました。
環境:Windows11、MySQL8.2.0、Apache/2.4.54 (Win64)
Windows11にXAMPP3.3.0内にあるMySQLの操作をphpMyAdminの画面でSQLを直接実行しました。
SQL文が読めればプログラム言語流用・実装は簡単かと思います。今回の作業で危険なのは、同一テーブル名が削除と作成の対象となっています。一方は新たに作成するテーブル、他方は現にあるテーブルで、削除と作成が逆になれば、大切なデータを一瞬にして失うということになりません。お試しの際は、くれぐれも注意深く、自己責任でお願いいたします。
SQL文:「AS」を使ってスマートに抽出・複製
- 元データベース:original_db
- 新データベース:new_db
- 元・新テーブル:table
あらかじめ、new_dbを作っておいてください(この時点で中身は空)
// CREATE DATABASE new_db; //この行だけ初回実行か、別途手作業で初回実行 DROP TABLE IF EXISTS new_db.table_name; CREATE TABLE new_db.table_name AS SELECT * FROM original_db.table_name WHERE date > "2025-03-01";
- new_dbにtable_nameがあったら削除(2回目以降の作業だった場合も考慮し)
- 新たにテーブル「table_name」を「new_db」上に作る(テーブル構造などは省略)
- その際、元データベース「original_db」の同名テーブル「table_name」から、条件抽出した結果を「コピペ」のようなことにする
- 抽出条件は「WHERE date > "2025-03-01」のように書き、ANDを使い複数条件にすることもできる
- 抽出する項目「SELECT * 」で、すべての項目抽出になるが、特定項目を「SELECT」もできる
- 優先キー、index化された項目など抽出する項目は合理的に
などというのが良さそうです。
このスクリプトの多くはMicrosoft:Copilotに教えてもらいました。とりわけ「AS」をつかうというところが大切でした。
爺だとこれが限界か、「LIKE~INSERT INTO」
「AS」の一撃、「LIKE~INSERT INTO」が幼稚に見える…。爺が最初に考えたSQL文は次のようなモノで動きました。
「IF」が無くても稼働しました。
DROP TABLE EXISTS new_db.table_name; CREATE TABLE new_db.table_name LIKE original_db.table_name; INSERT INTO new_db.table_name SELECT * FROM original_db.table_name WHERE date > "2025-03-01";
それにしても、「AS」と「LIKE~INSERT INTO」が同じようなことになるとは…。知らないということは、こういうことなんですね。
忘れないため、備忘録にしました。