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によって無視されるため、任意のファイル拡張子を使用することも、何も使用しないこともできます。