MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLテーブルへのインポート時に、テキストファイルの値ではなく変更後の列の値をアップロードする方法

テキストファイルの値ではなく変更後の値をMySQLテーブルに登録するには

テキストファイルに書かれた値をそのままアップロードするのではなく、変更を加えた値を登録したい場合は、ユーザー変数SETコマンドを組み合わせて使用します。この方法を使えば、元のファイルを編集することなく、インポートの時点で任意の計算や変換を適用できます。

例:給与に500を加算してインポートする

たとえば、「A.txt」というテキストファイルに以下のようなデータが保存されているとします。

105,Chum,USA,11000
106,Danny,AUS,12000

ここで、テキストファイル内の給与(salary)の値はそのまま残しつつ、インポートの時点で500を加算した値をテーブルに登録したいとします。このような場合は、ユーザー変数とSETオプションを使った次のクエリで実現できます。

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee11_tbl FIELDS TERMINATED BY ',' (id,name,country,@salary) SET salary = @salary + 500;
Query OK, 2 rows affected (0.21 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

mysql> Select * from employee11_tbl;
+------+----------------+----------+--------+
| Id   | Name           | Country  | Salary |
+------+----------------+----------+--------+
| 105  | Chum           | USA      |  11500 |
| 106  | Danny          | AUS      |  12500 |
+------+----------------+----------+--------+
2 rows in set (0.00 sec)

上記の結果セットを見ると、MySQLが給与の値に500を加算したうえでデータをテーブルへアップロードしていることがわかります。

仕組みのポイント

このクエリでは、列リストの中で「@salary」というユーザー変数を指定しています。これにより、テキストファイルの4番目のフィールド(給与)が直接salary列に入るのではなく、一時的にユーザー変数@salaryへ格納されます。その後、SET句の「salary = @salary + 500」という式によって、500を加算した値がsalary列に書き込まれるという流れです。

なお、このユーザー変数とSET句を組み合わせる手法は、数値の加算だけでなく、文字列の連結、日付形式の変換、NULL値の別の値への置き換えなど、さまざまなデータ変換にも応用できます。元データを汚さずに柔軟な取り込み処理を行いたい場合に非常に便利なテクニックです。

  1. MySQLであるテーブルから別のテーブルへINSERT INTOし、特定の列に固定値を設定する方法

    MySQLでは、INSERT INTO ... SELECT文を活用することで、既存テーブルのデータを別のテーブルへコピーしながら、同時に特定の列へ固定値を設定できます。本記事では、実際のSQLクエリ例を通じてその手順をわかりやすく解説します。手順1:元となるテーブルを作成するまず、コピー元となるテーブルを作成します。以下がそのクエリです。mysql> create table insertOneToAnotherTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.60 sec)手

  2. MySQLでブール(BOOLEAN)列にデフォルト値1を設定・変更する方法

    MySQLでは、ALTER TABLE文とDEFAULT句を組み合わせることで、既存のブール(BOOLEAN)型の列にデフォルト値「1」を割り当てることができます。あらかじめ設定しておけば、INSERTコマンド実行時にその列へ値を明示的に指定しなくても、自動的に1が格納されます。 サンプルテーブルを作成する まずはテーブルを作成しましょう。 mysql> create table DemoTable (     isAdult int ); Query OK, 0 rows affected (1.39 sec) 既存の列にデフォルト値1を設定する