更新mysql表行时,current_timestamp也会更新

时间:2013-08-17 01:24:34

标签: mysql

我有一个date_createdcurrent_time_stamp,用于存储创建行的日期 但每当我将UPDATE应用于该行时,即使我没有将任何数据应用于该列,date_created也会得到刷新。

我该如何防止这种情况?

以下是我应用UPDATE的代码:

$query = "UPDATE `templates` SET `categoria_id`='$categoria', `title`='$title', `image`='$image', `code`='$code', `date_updated`='".date('Y-m-d H:i:s')."' WHERE `id`='{$id}' LIMIT 1";
if(mysqli_query($connection, $query)) {
    echo "up_success";
}
else {
    echo "fail";
}

4 个答案:

答案 0 :(得分:2)

听起来像创建表时,字段已初始化以进行自动更新。如下所示。

CREATE TABLE templates (
   date_created TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
   ...
);

答案 1 :(得分:2)

对于DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP,该列具有其默认值的当前时间戳,并自动更新为当前时间戳。

CREATE TABLE t1 (
   ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

既没有DEFAULT CURRENT_TIMESTAMP也没有ON UPDATE CURRENT_TIMESTAMP,它与指定DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 相同。

CREATE TABLE t1 (
   ts TIMESTAMP
);

使用DEFAULT子句但没有ON UPDATE CURRENT_TIMESTAMP子句,该列具有给定的默认值,并且不会自动更新到当前时间戳。

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

答案 2 :(得分:0)

每次将成功更新应用于行时,类型为current_timestamp的列都会自动更新。

最好将date_created重命名为date_updated,并创建一个类型为int的新列(用于在创建时存储php中time()生成的unix时间戳)或其中一个日期时间/日期/时间类型。

答案 3 :(得分:0)

对于表创建,请使用以下构造。如果未指定默认值,则更新时间戳以更新任何列。

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

详情here