我有一个PHP脚本,可以将sql脚本导入MySQL 5数据库。
每个脚本只包含UPDATE
个语句,每个语句都更新表格中的1行(MyISAM)。
如果有一行未在其中一个脚本中进行2天,则必须将其删除。该表有一个时间戳列。但是,当UPDATE语句没有更改任何列时,时间戳不会更新,我无法告诉该行是否在导入文件中。 有没有办法强制这个时间戳更新,即使没有数据更改?
修改 进一步澄清。
importfiles是包含大约450.000行的gzip压缩文件,每行是1 UPDATE语句。
这是处理导入文件的PHP函数:
private function ImportFile($filename) {
$importfile = gzopen($filename, "r");
if (!$importfile) {
throw new Exception("Could not open Gzip file " . $filename);
}
while (!gzeof($importfile)) {
$line = gzgets($importfile, 4096);
if (!$line) {
throw new Exception("Error reading line number $line Gzip file $filename");
}
if (strlen(trim($line)) > 0) {
$this->DB->Query($line);
}
}
gzclose($importfile);
}
答案 0 :(得分:9)
您可以简单地更新未更新的所有字段,例如:
UPDATE mytable SET timestamp=NOW() WHERE id IN (1, 5, 6, ...);
答案 1 :(得分:4)
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
与使用NOW()类似 - 只要TIMESTAMP列不允许NULL值,您可以通过将该列设置为NULL来强制更新它。
UPDATE mytable SET timestamp=NULL