Anda tidak dapat menggunakan PREPARE
untuk menjalankan LOAD DATA INFILE
.
Daftar pernyataan yang dapat Anda jalankan dengan PREPARE
didokumentasikan di halaman ini:https:/ /dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
di bawah subpos "Sintaks SQL Diizinkan dalam Pernyataan yang Disiapkan". Perhatikan bahwa daftar ini mungkin berbeda di versi MySQL sebelumnya.
Karena Anda tidak dapat menggunakan PREPARE
, Anda tidak dapat melakukan metode yang Anda gunakan dengan menyetel variabel dan membuat pernyataan SQL dinamis.
Tetapi Anda dapat menjalankan LOAD DATA INFILE
tanpa menggunakan PREPARE
. Anda harus menginterpolasi nama file ke dalam pernyataan menggunakan substitusi variabel shell dan kemudian menjalankannya sebagai pernyataan SQL langsung.
File update.sql Anda mungkin terlihat seperti ini:
LOAD DATA LOCAL INFILE '%spacename%' INTO TABLE tmp
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
Kemudian Anda dapat mengganti variabel shell Anda ke dalam file dan menjalankan hasilnya dengan cara ini:
sed s/%spacename%/$1/ update.sql |
mysql -h "localhost" -u "root" "-pmypassword" "mydb"
Cara lain yang lebih sederhana adalah dengan menggunakan mysqlimport
, kecuali ini mengharuskan nama file input sama dengan nama tabel Anda. Anda dapat mengganti nama file input agar sesuai dengan tabel yang ingin Anda muat (yang Anda sebut tmp
), atau buat tautan simbolis:
ln -s $1 /tmp/tmp.list
mysqlimport --local -h "localhost" -u "root" "-pmypassword" "mydb" /tmp/tmp.list
rm -f /tmp/tmp.list
Ekstensi ".list" diabaikan oleh mysqlimport, jadi Anda dapat menggunakan ekstensi file apa pun, atau tidak sama sekali.