如果你在MySQL中运行这样的SQL语句:
SHOW TABLE STATUS LIKE 'TableName'
您将获得一个create_time列,其中包含创建表的日期/时间。
有没有办法修改或触摸'那个日期/时间通过SQL查询?
此表存储非关系缓存数据,有时我想重用数据,即使它已经过时了。
答案 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;