是否可以更改MySQL表的create_time?

时间:2015-03-30 22:51:50

标签: mysql

如果你在MySQL中运行这样的SQL语句:

SHOW TABLE STATUS LIKE 'TableName'

您将获得一个create_time列,其中包含创建表的日期/时间。

有没有办法修改或触摸'那个日期/时间通过SQL查询?

此表存储非关系缓存数据,有时我想重用数据,即使它已经过时了。

2 个答案:

答案 0 :(得分:0)

如果你可以改变表的创建时间,那会有点违反直觉吗?就像@Dijkgraaf建议的那样,你可能想重新考虑你的要求 - 这个问题听起来非常像XY problem。您不应该需要来更新表的创建时间。如何在列中包含所需的时间戳以及缓存数据呢?

那就是说,如果你真的需要更新的创作时间,你可以简单地创建一个新表copy the data over(当然,这是时间和空间上的O(n))。

答案 1 :(得分:0)

  

虽然您可以使用USE语句选择INFORMATION_SCHEMA作为默认数据库,但您只能读取表的内容,而不能对它们执行INSERT,UPDATE或DELETE操作。

来自Usage Notes for the INFORMATION_SCHEMA Database

看起来无法改变表格的元数据。 我希望避免在用户表中存储“创建时间”以节省开发时间。

如果表格数据超过24小时,我的缓存逻辑会刷新表格数据。刷新可能需要数小时,而且每次我想重新使用旧数据时,我都不想更改缓存逻辑。 Linux有一个'touch'命令来更新文件时间戳,所以我想知道MySQL是否有类似的东西。

下面是我重新创建表的SQL脚本,它确实更新了create_time,但速度很慢:

-- MySQL SQL Script to recreate a table 
-- for the purpose of updating the create_time

-- Create copy of the table with its indexes
CREATE TABLE tempForTouch LIKE TableToTouch;

-- Disable the indexes
ALTER TABLE tempForTouch DISABLE KEYS;

-- For performance, lock the tables
LOCK TABLES TableToTouch WRITE, tempForTouch WRITE;

-- Copy the data to the new table
INSERT INTO tempForTouch SELECT * FROM TableToTouch;

-- Unlock the tables
UNLOCK TABLES;

-- Re-enable the indexes
ALTER TABLE tempForTouch ENABLE KEYS;

-- Drop the original table
DROP TABLE TableToTouch;

-- Rename the temporary table to the new table
RENAME TABLE tempForTouch TO TableToTouch;