我下面有一些SQL代码,可以让我更改所有数量为'0'的实例,并仅在'数量'列中将它们更改为'1'。它工作正常,但......
但是,我尝试做的事情不会影响受影响行的时间戳列(称为“entry_date”),即。保留录入的原始时间。当我运行此查询时,它将使用下面的查询运行时替换最初创建条目的时间。
我如何解决这个问题?我有基本的中级PHP知识,但我的SQL知识不是很好。任何帮助将不胜感激。
更新
databasename
。tablename
SETquantity
='1'
在tablename
。quantity
='0';
答案 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