2014-10-06 69 views
0

我有點困惑,我該如何做到這一點。截斷MySQL表,但排除第一列

我基本上是想給我的第一列中的「NOT NULL AUTO_INCREMENT」,並給每一行它自己的「身份證」。我遇到的問題是我正在使用的腳本使用每日cron的CSV文件截斷整個SQL表以更新數據。

我目前使用這個腳本:

<?php 

$databasehost = "localhost"; 
$databasename = ""; 
$databasetable = ""; 
$databaseusername=""; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n"; 
$enclosedbyquote = '"'; 
$csvfile = "db-core/feed/csv/csv.csv"; 

if(!file_exists($csvfile)) { 
die("File not found. Make sure you specified the correct path."); 
} 

try { 
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
$databaseusername, $databasepassword, 
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true, 
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
) 
); 
} catch (PDOException $e) { 
die("database connection failed: ".$e->getMessage()); 
} 

$pdo->exec("TRUNCATE TABLE `$databasetable`"); 

$affectedRows = $pdo->exec(" 
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." REPLACE INTO TABLE `$databasetable` 
FIELDS OPTIONALLY ENCLOSED BY ".$pdo->quote($enclosedbyquote)." 
TERMINATED BY ".$pdo->quote($fieldseparator)." 
LINES TERMINATED BY ".$pdo->quote($lineseparator)." 
IGNORE 1 LINES"); 

echo "Loaded a total of $affectedRows records from this csv file.\n"; 

?> 

是否有可能修改這個腳本忽略我的第一列和第一列截斷所有的數據表中分開?

我可以再給所有行的第一列自己的ID的任何想法,我怎麼能做到這一點?

我還是很nooby所以請去容易對我:)

回答

1

但從數據庫的角度來看,你的問題是沒有意義的:截斷表是指從該表中完全刪除所有,並且批量插入創建一個新的的整個負載。 SQL中沒有「刪除列」或「將列插入現有行」的概念。

爲了添加或覆蓋現有行中的數據,您需要更新這些行。如果您批量插入數據,那意味着您需要以某種方式將每個新行與現有行對齊。如果行數改變會發生什麼?如果您只保留該行的ID,那麼您實際上想要排隊的是什麼?另外值得指出的是,表中的行真的沒有訂單,所以如果你的想法是相匹配「以」行,你仍然需要一些由訂購...

我想你需要退一步,考慮你是什麼問題實際上試圖解決(查找「的X/Y問題」以獲得更多關於陷入思考一個特定的方法,而不是真正的問題)。

一些可能性:

  • 您需要分配其重複使用相同的ID範圍爲舊數據的新數據ID,但與不同的內容。
  • 您需要確定進口行是新的,哪些更新,以及現有的行基於一些匹配標準要刪除的。
  • 其實你不希望在所有截斷的數據,因爲它引用的其他地方,以便需要「軟刪除」(標記爲非活動)來代替。