mysql中清空數據庫數據保留表結構(史上最簡單,一句話搞掉)

這裏簡單說下我們公司信息化平臺在雲上部署上線的情景,mysql數據庫被分在了測試機和正式機,測試機是開發人員對數據庫進行表結構修改例如字段信息的場景,而正式機是對外部的業務,因此正式機的數據是最終使用的,但是遇到了一個困難,由於我的權限控制,開發人員沒辦法去把測試機的表結構對應的和正式機的表結構去同步,而造成現在我想把數據庫導入到雲上的正式數據庫服務器時不知道怎麼導入數據庫,這就讓我想到了一個辦法,能不能先導入測試機的數據庫以及表結構,然後清空測試數據,保留表結構,然後再導出正式機的數據(不導出表解構),然後再導入正式機的數據,也就是測試機的表結構和正式機的數據結合起來,後來發覺這是自己做的一件蠢事,後來開發人員好像用navicat把測試機和正式機的表結構給同步了就沒問題了。

不過這裏還是簡單說下mysql中如何清空數據庫數據保留表結構,可能大家在日後的工作中有需要呢!下面直接給出sql查詢腳本:

 mysql> select CONCAT('TRUNCATE TABLE ',TABLE_SCHEMA,'.',table_name,';') from information_schema.tables where TABLE_SCHEMA='gzpc' into outfile '/tmp/truncate.sql';

簡單解釋下:

concat()函數:連接字符串,上面連接後就是truncate table table_schema.tablename(table_schema是存放數據庫表名的表,tablename是改表中數據庫對應的字段),而這個table_schema的表是在information_schema這個數據庫中的,這樣查詢產生的結果是會出現truncate table 表1;truncate table 表2這樣的刪除表數據的操作,在後面產生的sql腳本中我會截圖給大家看結果

TABLE_SCHEMA='gzpc':gzpc是你要清除數據的數據庫名,具體的大家根據自己需要清除數據的數據庫名字修改

'/tmp/truncate.sql':把查詢的結果導出成sql腳本並且放在tmp目錄中,這裏如果是導出到別的目錄,那麼極有可能是是會報錯的,說權限不足,爲什麼呢,因爲mysql導出腳本的話默認用戶是匿名用戶,而linux目錄一般的權限一般是root用戶纔有這個權限,而tmp目錄的權限是777,其他用戶也是有所有權

然後我們去tmp目錄下看下這個腳本里面到底有什麼神奇的語句:

可以看到是truncate table + gzpc數據庫所有的表名

最後當然是在數據庫中執行這個腳本:

mysql> source /tmp/truncate.sql;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章