SQL:UPDATE查询,不影响行上的时间戳

时间:2012-11-01 02:50:23

标签: mysql sql sql-update row

我下面有一些SQL代码,可以让我更改所有数量为'0'的实例,并仅在'数量'列中将它们更改为'1'。它工作正常,但......

但是,我尝试做的事情不会影响受影响行的时间戳列(称为“entry_date”),即。保留录入的原始时间。当我运行此查询时,它将使用下面的查询运行时替换最初创建条目的时间。

我如何解决这个问题?我有基本的中级PHP知识,但我的SQL知识不是很好。任何帮助将不胜感激。

  

更新databasenametablename SET quantity ='1'
  在tablenamequantity ='0';

3 个答案:

答案 0 :(得分:1)

首先,DESCRIBE tablename,并注意“entry_date”在更新CURRENT_TIMESTAMP上有 Extra info“。这就是你想要避免的行为。

接下来,ALTER TABLE tablename MODIFY COLUMN entry_date TIMESTAMP [NULL | NOT NULL] DEFAULT CURRENT_TIMESTAMP;

(根据需要指定'NULL'或'NOT NULL'。)

最后再次DESCRIBE tablename,并注意 Extra 信息已消失。

答案 1 :(得分:1)

您可以尝试这样的事情:

UPDATE databasename.tablename SET quantity = '1', entry_date = entry_date
WHERE tablename.quantity = '0';

并查看它是否不会覆盖ON UPDATE CURRENT_TIMESTAMP指定的行为。

答案 2 :(得分:0)

如果您希望时间戳字段entry_date在更新时不自动更改,则需要在表格上的任何更新查询之前执行以下查询

ALTER TABLE `tableName` CHANGE `entry_date` `entry_date` TIMESTAMP NOT NULL
 DEFAULT CURRENT_TIMESTAMP 

相反:在此之后,如果您再次希望时间戳字段entry_date在更新时自动更改..您需要在表格上的任何更新查询之前执行以下查询

ALTER TABLE `tableName` CHANGE `entry_date` `entry_date` TIMESTAMP ON UPDATE
 CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP