sql >> Databáze >  >> RDS >> Mysql

MySQL load data:Tento příkaz zatím není podporován v připravovaném výpisovém protokolu

Nemůžete použít PREPARE pro spuštění LOAD DATA INFILE .

Seznam příkazů, které můžete spustit pomocí PREPARE jsou zdokumentovány na této stránce:https:/ /dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html pod podnadpisem "Syntaxe SQL povolena v připravených příkazech". Tento seznam se může v dřívějších verzích MySQL lišit.

Protože nemůžete použít PREPARE , nemůžete použít metodu, kterou používáte, nastavením proměnné a vytvořením dynamického příkazu SQL.

Můžete ale spustit LOAD DATA INFILE bez použití PREPARE . Musíte interpolovat název souboru do příkazu pomocí substituce proměnné shellu a poté jej spustit jako přímý příkaz SQL.

Váš soubor update.sql může vypadat takto:

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

Pak můžete do souboru nahradit proměnnou shellu a výsledek spustit takto:

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

Dalším jednodušším způsobem je použít mysqlimport , ale to vyžaduje, aby vstupní název souboru byl stejný jako název vaší tabulky. Vstupní soubor můžete buď přejmenovat, aby odpovídal tabulce, do které chcete načíst (což nazýváte tmp ), nebo vytvořte symbolický odkaz:

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

Příponu „.list“ mysqlimport ignoruje, takže můžete použít jakoukoli příponu souboru, nebo žádnou.



  1. Jak otestovat metody, které se zabývají databází SQLite v Androidu?

  2. Nastavte možnost 9 v uložené proceduře SQL Server pomocí WinHttp.WinHttpRequest.5.1 pro TLS 1.2

  3. Proměnná MySQL wait_timeout - GLOBAL vs. SESSION

  4. Jak vyřešit chybu MySQL max_user_connections