sql >> データベース >  >> RDS >> Mysql

MySQLロードデータ:このコマンドは、プリペアドステートメントプロトコルではまだサポートされていません

    PREPAREは使用できません LOAD DATA INFILEを実行するには 。

    PREPAREで実行できるステートメントのリスト このページに記載されています: https:/ /dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html 小見出し「プリペアドステートメントで許可されるSQL構文」の下。このリストは、以前のバージョンのMySQLでは異なる場合があることに注意してください。

    PREPAREは使用できないため 、変数を設定して動的SQLステートメントを作成することによって使用しているメソッドを実行することはできません。

    ただし、LOAD DATA INFILEを実行することはできます PREPAREを使用せずに 。シェル変数置換を使用してファイル名をステートメントに補間し、それを直接SQLステートメントとして実行する必要があります。

    update.sqlファイルは次のようになります。

    LOAD DATA LOCAL INFILE '%spacename%' INTO TABLE tmp 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
    

    次に、シェル変数をファイルに置き換えて、次のように結果を実行できます。

    sed s/%spacename%/$1/ update.sql | 
      mysql -h "localhost" -u "root" "-pmypassword" "mydb"
    

    もう1つの簡単な方法は、mysqlimport を使用することです。 ただし、これには、入力ファイル名がテーブル名と同じである必要があります。ロードするテーブル(tmpと呼びます)に一致するように入力ファイルの名前を変更できます。 )、またはシンボリックリンクを作成します:

    ln -s $1 /tmp/tmp.list
    mysqlimport --local -h "localhost" -u "root" "-pmypassword" "mydb" /tmp/tmp.list
    rm -f /tmp/tmp.list
    

    「.list」拡張子はmysqlimportによって無視されるため、任意のファイル拡張子を使用することも、何も使用しないこともできます。



    1. ROWNUMはページネーションクエリでどのように機能しますか?

    2. MYSQL-タイムスタンプ値を新しいものから古いものへと昇順で並べ替えますか?

    3. MySQL-テーブルのすべての列でLIKEを使用することは可能ですか?

    4. テーブルを複数回注文しようとしています