如果你像這樣運行MySQL中的SQL語句:是否可以更改MySQL表的create_time?
SHOW TABLE STATUS LIKE 'TableName'
您將獲得包含日期/時間創建的表中的列CREATE_TIME。
有沒有辦法通過SQL查詢修改或「觸摸」該日期/時間?
此表存儲非關係緩存數據,有時我想重用即使數據較舊的數據。
如果你像這樣運行MySQL中的SQL語句:是否可以更改MySQL表的create_time?
SHOW TABLE STATUS LIKE 'TableName'
您將獲得包含日期/時間創建的表中的列CREATE_TIME。
有沒有辦法通過SQL查詢修改或「觸摸」該日期/時間?
此表存儲非關係緩存數據,有時我想重用即使數據較舊的數據。
如果您可以更改表的創建時間,那麼這會有些違反直覺嗎?就像@Dijkgraaf建議的那樣,您可能想重新考慮您的要求 - 這個問題聽起來很像XY problem。您不應該需要來首先更新表的創建時間。只需將所需的時間戳存儲在緩存數據旁邊的列中,那又如何呢?
也就是說,如果您確實需要更新的創建時間,那麼您可以簡單地創建一個新表和copy the data over(當然,這是時間和空間上的O(n))。
雖然可以使用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;
如何創建表的日期從使用數據阻止你?還有一個Update_time字段,但不適用於所有引擎。 – Dijkgraaf 2015-03-30 23:36:50
如果你像這樣在MySQL中運行SQL語句:'SELECT your_very_old_data FROM your_really_old_table WHERE your_condition'你將獲得數據。注意創建日期在檢索數據時沒有發言權。 – 2015-03-31 14:18:45
緩存邏輯不在SQL中,它在外部代碼中。每次我想使用舊數據時,我都不想改變這個邏輯。 – humbads 2015-03-31 15:02:18