O. *_*nes 116
发出命令 SHOW CREATE TABLE whatever
然后看一下表定义.
它可能有这样一条线
logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Run Code Online (Sandbox Code Playgroud)
在里面. DEFAULT CURRENT_TIMESTAMP表示INSERT没有明确时间戳设置的任何一个使用当前时间.同样,ON UPDATE CURRENT_TIMESTAMP意味着没有显式时间戳的任何更新都会导致更新当前时间戳值.
您可以在创建表时控制此默认行为.
或者,如果首先未正确创建时间戳列,则可以更改它.
ALTER TABLE whatevertable
CHANGE whatevercolumn
whatevercolumn TIMESTAMP NOT NULL
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)
这将导致表上的INSERT和UPDATE操作自动更新时间戳列.如果要在whatevertable不更改时间戳的情况下进行更新,即
在其他列更改时阻止列更新
那么你需要发布这种更新.
UPDATE whatevertable
SET something = 'newvalue',
whatevercolumn = whatevercolumn
WHERE someindex = 'indexvalue'
Run Code Online (Sandbox Code Playgroud)
并且,这TIMESTAMP仅适用于列,不适用于列DATETIME或DATE列.因为列是TIMESTAMPs,所以考虑时区:在正确配置的服务器计算机上,这些值始终以UTC格式存储并在检索时转换为本地时间.
当行中任何其他列的值从其当前值更改时,自动更新的列会自动更新为当前时间戳。如果所有其他列都设置为其当前值,则自动更新的列保持不变。
为了解释它,让我们假设您只有一行:
-------------------------------
| price | updated_at |
-------------------------------
| 2 | 2018-02-26 16:16:17 |
-------------------------------
Run Code Online (Sandbox Code Playgroud)
现在,如果您运行以下更新列:
update my_table
set price = 2
Run Code Online (Sandbox Code Playgroud)
它不会改变 updated_at 的值,因为价格值实际上并没有改变(它已经是 2)。
但是,如果您有另一行的价格值不是 2,那么该行的 updated_at 值(价格 <> 3)将更新为 CURRENT_TIMESTAMP。
| 归档时间: |
|
| 查看次数: |
85410 次 |
| 最近记录: |