2014-10-16 17 views
-2

我使用PHP來解析大的CSV文件並生成一個包含INSERT請求的SQL文件。 但是在文件的開始處,我還放了一條DELETE語句來清除數據庫。批量運行SQL文件中刪除語句

我的文件看起來像這樣的事情:

DELETE FROM `my_table` WHERE id IN (<list>) ; 
INSERT INTO `my_table` .... (lot of values); 

的線插入正確,但舊的不會被刪除。我嘗試了PHPMyAdmin中的刪除請求:它的工作原理。所以這個問題來自我運行sql文件的方式。

我使用exec方法在PHP中:

$command = "mysql.exe -u user -pPassword my_database < sqlfile.sql"; 

看來,這條線,使用左字形,工作正常的INSERT語句,但不能用於DELETE的。

任何想法解決?

感謝很多:)

+0

的留言嗎? – Jens 2014-10-16 13:03:27

+0

http://stackoverflow.com/questions/896810/sql-batched-delete – 2014-10-16 13:03:33

+0

沒有信息; @AvinashBabu:完全不一樣的問題。我的刪除工作,如果我手動運行。我運行sql文件的方式並不正確。 – 2014-10-16 13:05:16

回答

0

代碼是不完全清楚,但你WHERE ... IN條款來看,你可以手動通過SELECT生成一個ID和手動遞增(通常是壞),或者你乾脆做錯了。我看到基於這些場景的兩個選項:

TRUNCATE TABLE `my_table` 

這會從上述表中清空以前的所有值。

其次,如果你是自動生成的ID,設置ID作爲自動遞增,並嘗試在控制檯上

# Null corresponds to auto-increment/primary key ID field in MySQL table 
INSERT INTO `my_table` ... VALUES (null, value, value) 
+0

Finaly它的工作原理。我正在做「刪除...; SET NAMES UTF-8; INSERT」。我把SET NAMES語句放在開頭,現在可以嗎? – 2014-10-16 13:13:28

+0

是的,這會破壞它,因爲SET NAMES需要在腳本的開始處。但是你需要SET NAMES嗎?你正在發送特殊字符嗎? – iamgory 2014-10-16 13:16:47