2012-11-01 57 views
0

我有一些SQL代碼,下面這個代碼使我能夠更改數量爲'0'的所有實例,並在'數量'列中將其更改爲'1' 。它工作正常,但...SQL:更新查詢不影響行上的時間戳

但是,我想要做的,但不影響時間戳列(稱爲'entry_date')在受影響的行,即。保留輸入的原始時間。當我運行這個查詢時,它會替換下次查詢所運行的時間。

我該如何解決這個問題?我有基本的中級PHP知識,但我的SQL知識並不好。任何幫助,將不勝感激。

UPDATE databasenametablename SET quantity ='1'
WHERE tablenamequantity ='0';

回答

1

首先,DESCRIBE tablename,並注意 「ENTRY_DATE」 有額外信息 「上更新CURRENT_TIMESTAMP」。這是你想要避免的行爲。

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

(您指定 'NULL' 或 'NOT NULL' 適當的。)

最後,再次DESCRIBE tablename,並注意額外信息不見了。

+0

任何更新查詢之前執行(並添加或者'NULL'或'了'MODIFY COLUMN'子句中NULL',以保持該列的空性)。 –

+0

@ypercube,對,謝謝。更新 – pilcrow

1

你可以嘗試這樣的事:

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

,看看它是否不覆蓋由ON UPDATE CURRENT_TIMESTAMP指定的行爲。

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