• 締切済み

ファイルからのデータ更新について

表題の件について質問させていただきます。 mysqlでカンマつきのCSVファイルからデータをテーブルにインポートする際、 load data infile 'ファイルディレクトリ情報' update table テーブル名 fields terminated by ','; でインポート可能かと思います。 では、このファイルをインポートしたあとに、CSVのデータを変更して同じコマンドを使用すると、レコードが追加され、「更新」にはなりません。 ファイルからのレコード更新はどのようにすれば宜しいでしょうか? 例として下記のDB定義、インポートファイルを使用しています。 データベース定義 bang(INT) name(VARCHAR(10)) ten (INT) インポートファイル変更前 1,山本,85 2,木村,58 3,山崎,95 インポートファイル変更後 1,山本,85 2,木村,58 3,今田,95      ←name変更 何卒よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

置き換えたいときは、まず、その行を一意に特定するためのuniqueなカラムまたはindexがあることが前提で、それがあれば、replaceを指定すれば置き換えになります。 LOAD DATA LOCAL INFILE 'file_name.txt' REPLACE INTO TABLE tbl_name マニュアル参照 http://dev.mysql.com/doc/refman/5.1/ja/load-data.html

noname#119957
noname#119957
回答No.1

csvで更新するSQLがあればそれを探してください。^^ ** 無いばあいは、 (1)一時的に使用するテーブルをクリア (2)CSVから一時的なテーブルに読み込む(インポート) (3)SQLでテーブルのデータを更新 では?

関連するQ&A

  • csvファイルを使ってMySQLのテーブルを更新し

    約2万件ある15個のカラムで構成されるMySQLのテーブルがあります。 このテーブルをcsvファイルを使って更新しようと考えています。 csvファイルにはレコードIDとあるカラムの変更する値の2つのセルで 構成されています。 行数は毎回異なりますが、だいたい300行前後です。 csvファイルの具体的イメージはこんな感じです。 id order ============ 2,  200 4,  10 7,  460 11,  35 MySQLのテーブルの方にも「id」と「order」というカラムが存在します。 java や PHP を使ってやる方法はわかるんですが、プログラムを作成しないで SQLだけで行いたいと考えています。 LOAD DATA LOCAL INFILE などがあることがわかったのですが、レコードを REPLACE  するのではなく、一部のカラムをアップデートしたい、ということです。 どなたか、教えて頂けると助かります。 よろしくお願い致します。

  • insertを用いてテーブルにレコードを追加することができるのにもかか

    insertを用いてテーブルにレコードを追加することができるのにもかかわらず、load data infile を用いるとerror1366と表示されてしまいます。解決方法を教えてください。 Windows7 mysqlは最新版を使っています。 インストールしたそのままの状態だと、insertを用いて日本語を挿入しようとするとerror 1366と出てしまってましたが、my.iniを書き換えることによってinsert table1 values (1,'ああ');といった操作でエラーが出ることはなくなりました。 しかしcsvファイルをload data infileを用いてインポートしようとすると、またerror 1366が出てしまいました。 インポートしようとしたファイルには日本語が書かれています。 英字だけのファイルを同様にインポートすると、エラーは出ませんでした。 <table1> id int(15) name varchar(255) 1,a 2,b 3,asdf … はインポート可能 。また insert table1 values (1,'あ'); も正常に動作。 1,あ 2,い … をインポートするとエラー。 これができないと先に進めません・・・ ご教授お願いします。

  • CSVファイルを毎日、全レコード一括更新したい

    毎日、CSV形式で送られてくる最新のデータがあります。 それを自動的にMySQLに一括で追加・更新したいと考えています。 CSVファイルは毎日、データが追加されたり、UPDATEされたり、削除されたりしています。そのCSVファイルのデータを神様DBとして、上書きしたいと思っています。 つまり、前日のMySQLのデータを本日のデータで完全に上書きしたいと考えています。 単にデータをロードするだけなら mysql> load data infile "ファイルパス/ファイル名.csv" -> into table テーブル名 fields terminated by "," lines terminated by "\n"; でよいと思いますが、完全上書きの方法がよくわかりません。 それとも、上記方法で同じことを2度すると完全に上書きされるのでしょうか?同じレコードが2つ出来上がるのでしょうか?それともマージされるのでしょうか? もし、お分かりでしたらご教授ください。

    • ベストアンサー
    • MySQL
  • CSVファイルインポート時の制限について

    AccessVBAでcsvファイルをインポートするマクロを作っています。 現在、インポート定義を利用して、データ型を指定したインポートができているのですが、1点だけ問題があり、質問します。 インポートするcsvファイルのA列にIDが入力されています。 そのA列の末尾に、ID(数値型)ではない「<b>32</b><br />」という値が入っています。 Accessのテーブルでは、このIDのフィールドは数値型で管理している為、この1レコードだけ エラーとなり、エラーテーブルが作られ、また、インポート先のテーブルには空のレコードができてしまいます。 この末尾の行については、IDではない「<b>32</b><br />」以外は何もデータが入っていない為、 インポートする必要がありません。 もし可能であれば、csvファイルのA列(Accessテーブルでは数値型のIDというフィールド)が数値ではない場合、 その行のインポートをスキップするような処理がVBAで作成できるとよいのですが、可能でしたら教えてください。

  • 半角をいれるとうまくデータが更新されない

    PHP/MySQL/HTMLで、データを更新する画面を 練習として、作成しています。 保守するデータは、全国の都道府県名です。 都道府県には、番号がふられています。 MySQLのテーブルは、BANG(int 4) KNNA(varchar 40) のような感じです。 第1画面で、都道府県コードを入力し、 都道府県テーブルにデータがあった場合、 第2画面(データ変更画面)を表示します。 表示の際、テーブルから、都道府県名を画面にセットします。 データ変更画面は、 <tr><th>県コード</th> <td><?php echo($bang); ?></td> </tr> <tr><th>県名</th> <td><input type="text" name="KNNA" value=<?php echo($knna); ?>> </tr> というフォームです。 SUBMITボタンを押すと、画面の県名をSQLに接続し、テーブルにUPDATEします。 ここで、県名に東京1と、全角と半角を続けて更新すると、データに綺麗に値が落ちます。 再度、東京1を保守するために呼び出すと、 変更画面には東京1と表示されます。 しかし、東京 1と、京と1の間に半角のスペースを空けると、データには落ちますが、再度画面を呼び出したとき、県名には東京までしか表示されません。 原因が全くわからず、悩んでいます。 素人な質問で済みませんが、どなたか教えていただけたらと思います。

    • ベストアンサー
    • PHP
  • MySQLのLOAD文を使ってCSVファイルをデータベースにインポートしたい

    MySQLのLOAD文を使ってCSVファイルの内容をデータベースにインポートしたいと思っています。 そこで、下記のような内容のCSVファイルを作成しました ファイル名:word_list1.csv ↓ファイルの内容↓ 1,apple 2,egg 3,music 4,movie 5,baseball 作成した word_list1.csv の保存場所は C:/hole_problem/word_list1.csv です また、word_list1.csv の内容をインポートするデータベース側のテーブルは下記のコマンドにより定義されています CREATE TABLE word_list( id INT AUTO_INCREMENT, name VARCHAR(50) NOT NULL, CONSTRAINT id_pri PRIMARY KEY (id) ) ENGINE=InnoDB; CSVファイル word_list1.csv とデータベース側のテーブル word_list の準備が整ったところで下記のコマンドを実行しました LOAD DATA LOCAL INFILE "C:/hole_problem/word_list1.csv" INTO TABLE word_list FIELDS TERMINATED BY ','; コマンドはエラーなどなく正常に実行されましたが、実行後にデータベースを参照すると下記のようになっています id name 2 egg 3 music 4 movie 5 baseball 35 apple ここで質問なのですが、なぜ、CSVファイルでの順番とインポート後のデータベースでの順番が異なってきてしまうのでしょうか? 教えて頂けると助かります。 また、どのようにすれば順番が変わることなくCSVファイルの内容をデータベースにインポートできるのでしょうか?

    • ベストアンサー
    • MySQL
  • VBAでインポート元ファイルの読込可否を判別するには?

    AccessVBAであるCSVファイルをインポートして処理を行っています。 インポート元であるCSVファイルは2分毎に更新されており、データ量が多い関係上書込みに十数秒掛かっています。 この間にAccessからCSVファイルのインポートを掛けると 「ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」 と出てしまいます。 このことから、 1.ファイル読込の可否を判別し、可能ならテーブルのレコードを削除しインポートを行う 2.不可ならテーブルにある既存のデータを用い集計を行う という一文をIf関数を用いた形で追加したいのですが、インポート元のファイルの読込可否を判別する方法はありますでしょうか? 識者の方アドバイスの程よろしくお願い致します。

  • Load Data INFILE構文について

    お疲れ様です。 いつもお世話になっております。 既にデータが入っているテーブルに対して、CSVをインポートし、該当のレコードだけUPDATEをかけたいと思っています。 ID,名前,備考,属性 1,aaa,, 2,bbb,BBB, 3,ccc,,zok3 4,ddd,,zok4 5,eee,EEE, というデータがあり、これに対して 1,,,zok1 2,,,zok2 5,,,zok5 6,fff,FFF,zok6 というデータを持つcsvを突っ込もうと思っています。 その場合、IDが1,2,5の名前や備考はNULLで上書きされてしまうのでしょうか? また、既存のテーブルにないcsvのID6は入れないようにしたいのですが、これだとLOAD_DATA_INFILEというよりただのUPDATEです。 これらのデータが100万件あって、属性の抜けだけを補完し、既にテーブルから消されているデータはINSERTしたくないのですが、何かスマートな方法はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ACCESS2000での大量データ処理

    CSVファイルの情報をACCESS2000にインポートして集計処理をしたいと考えてます。 CSVファイルの構成は、20フィールド(全て文字属性)で1レコード、1400レコードで1件となっております。(この仕様を変更する事は出来ないのが条件です。) 言い直せば、1名分の情報は1400レコードあるとなります。但し、集計に使用する情報はその内の400レコードであり、1000レコードは不要です。 処理する人数は3万件ぐらいあります。 (1)1400レコード×3万件の情報をインポート出来るのでしょうか?    テーブル制限の1Gを超えないのでしょうか(テーブルサイズの参照方法も?) (2)CSVをインポートする際に、必要なフィールド400だけインポートできるVBAはあるのでしょうか?  必要不要の判別フィールドはあります。 (3)インポート後、ACCESSで400項目を1レコードにする事はできないか?255以上のフィールドのテールを処理する方法はあるのでしょうか? (4)このような大量集計を可能にするには、みなさんは何を使用しているのでしょうか? よろしくお願いいたします。

  • MicrosoftAccess2003について

    Microsoft Access2003にて、2つのCSVファイルをインポートして、1つの任意テーブル形式に反映される方法を教えて下さい。 Microsoft Accessの初心者(2,3時間触った程度)です。EXCELは簡単なマクロを作成できる程度です。 現在、居なくなった人が作成したAccessファイルがあり、当該ファイルを更新する作業を行っています。 更新作業内容 1.現在の仕様にて、フォームに手打ちにてデータを打ち込みテーブルに反映させるように なっているのを、ボタンを押して打ち込む内容を含んだCSVファイル(2種類)をインポートして 当該テーブルに反映させたい。手打ちで行う方法も残して、別途データ読込み機能を追加 したい。 つまり、2種類のCSVファイルをインポートし、一つのテーブルをインポートした内容を反映したものにしたい。 (テーブルが更新されれば、その後の処理は作成済みとなってます。) 2.仕様 CSVでは、入金と出金でファイルが2つに別れているが、テーブルは1つで管理しています。 (1)テーブルの仕様: 「」がフィールド名、【】がデータ型、その後は説明です。 (1)「id」、【オートナンバー】 (2)「削除」、【yes/no型】 (3)「受付区分」、【テキスト型】、2種類のファイルの分類。入金ファイルの場合は全て『1』、出金は『2』と記入する。 (4)「〇〇コード」【テキスト型】、インポートしたファイルから反映。CSVファイルも「〇〇コード」というレコード ~ (7)「区分」【テキスト型】、インポートしたファイルから反映。CSVファイルでは「区分コード」のレコードに該当。 しかし、CSVファイルには「区分」というレコードがあり、日本語が記入されている。 レコード名がテーブルとCSVで合あってないのはこの一つのみです。 他の箇所に影響するため、フィールド名は変更できない。 ~ (12)列まであります。CSVファイルから反映するものもあれば、反映せずNULLで表示したい箇所もあります。 (2)2つのCSVファイルの仕様 データのフォーマットは全く同じ。ファイル名が違うのみ。(入金と出金) 上記2.(1)(3)はファイル名で見分けるしかできない。 共に(1)~㉝の列で構成されている。テーブルに必要は情報は、2.(1)(3)以外は含まれている。 拙い説明文書で申し訳ございませんが、ご協力お願いいたします。 不十分な点があるかと思いますが、ご質問頂ければ回答させて頂きます。 本当に初心者なため、手順なども教えて頂ければ幸いです。 皆様、宜しくお願いいたします。