即使行数据未更改,也要更新MySQL时间戳

时间:2011-03-11 09:10:08

标签: php mysql

我有一个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);
}

2 个答案:

答案 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