国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用python解決mysql視圖導(dǎo)入導(dǎo)出依賴的問題

2020-02-16 11:09:17
字體:
供稿:網(wǎng)友

視圖

視圖是一個虛擬表(非真實(shí)存在),其本質(zhì)是根據(jù)SQL語句獲取動態(tài)的數(shù)據(jù)集,并為其命名,用戶使用時只需使用名稱即可獲取結(jié)果集,并可以將其當(dāng)作表來使用。

創(chuàng)建視圖

創(chuàng)建一個名稱為v1的視圖,其功能就是查詢color表中的所有數(shù)據(jù)

CREATE VIEW v1 AS SELECT * FROM color;

查看視圖

使用視圖時,將其當(dāng)作表進(jìn)行操作即可,由于視圖是虛擬表,所以無法使用其對真實(shí)表進(jìn)行創(chuàng)建、更新和刪除操作,僅能做查詢用。

select * from v1; -- 等于執(zhí)行SELECT * FROM color

輸出結(jié)果

+-----+--------+| nid | title |+-----+--------+| 1 | red || 2 | yellow |+-----+--------+2 rows in set (0.00 sec)

修改視圖

ALTER VIEW v1 AS SELECT * FROM color WHERE nid = 1;

刪除視圖

DROP VIEW v1;

引用

navicat是mysql可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會報錯。這個問題一直困繞我,一度因?yàn)槲沂褂胐ocker來部署mysql而繞過了這個問題。最近不得不直面這個問題,因此,寫了一個小工具來解決它。

整體思路

在mysql很容易查出所有視圖和其定義,因此可以寫一個視圖導(dǎo)出工具,存儲時對各視圖的保存位置進(jìn)行調(diào)整,處理好它們之間的依賴關(guān)系,被依賴的放前面,這樣就解決了導(dǎo)入時的依賴問題。

獲取視圖信息

運(yùn)行以下查詢語句,就能獲得該數(shù)據(jù)庫中所有視圖的信息。

select * from information_schema.VIEWS where TABLE_SCHEMA = DatabaseName

查詢結(jié)果字段說明:

TABLE_NAME : 數(shù)所庫中視圖名稱 VIEW_DEFINITION : 視圖的定義代碼,只有查詢語句部分 DEFINER : 視圖定義(建立)者名稱 SECURITY : 安全級別

總之,所有視圖的信息都在這個表中保存,我要完成任務(wù),只需要TABLE_NAME和VIEW_DEFINITION就可以了。

算法描述

將查詢結(jié)果放到dict中,視圖名稱為key;視圖定義為value; 編寫處理依賴關(guān)系的函數(shù)process_rely,輸入?yún)?shù)中的rely_old為保存所有視圖名稱的數(shù)組;返回參數(shù)為按依賴關(guān)系調(diào)整順序后的視圖名稱數(shù)組。之所以這樣做,是一開始考慮到,依賴關(guān)系復(fù)雜時,可能一次迭代處理不好,需要遞歸調(diào)用或多次調(diào)用。

process_rely函數(shù)算法描述:

    第一層循環(huán),從rely_old中取一個視圖名稱

        第二層循環(huán),從dict中取出一個鍵值

            若鍵值被第一層元素的定義所依賴

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 元朗区| 开平市| 丽水市| 泰顺县| 潢川县| 正安县| 延川县| 康马县| 米易县| 石城县| 苍梧县| 华亭县| 兴文县| 资兴市| 清丰县| 马关县| 佛坪县| 闵行区| 霍州市| 胶州市| 商都县| 琼结县| 瓮安县| 易门县| 靖安县| 万年县| 海宁市| 温宿县| 曲水县| 含山县| 绥宁县| 阿瓦提县| 砀山县| 汨罗市| 昌都县| 察雅县| 遵义市| 德清县| 彭州市| 阿瓦提县| 清丰县|