1. 程式人生 > >檢視、事物、索引

檢視、事物、索引

        1.檢視:
            1.什麼是檢視,有什麼用?
                檢視是通過select查詢出來的結果集,是一個虛擬的表,當在檢視複雜的表時
                可建立檢視方便二次檢視,檢視封裝了對多張基本表的複雜操作,簡化使用者操作

            2.檢視的特點:
                檢視是對若干張基本表的引用,一張虛表,查詢語句執行的結果,不儲存具體的
                資料(基本表資料發生了改變,檢視也會跟著改變)
            3.定義檢視:
                語法:create view 檢視名稱 as 查詢語句
                    例:create view v_goods as (select g.id,g.name,c.name as "cate_name",b.name as "brand_name",g.price,g.is_show from goods as g inner join goods_cates as c inner join goods_brands as b on g.cate_id=c.id and g.brand_id=b.id);
            4.使用檢視:
                1.使用檢視: select * from 檢視名稱
                2.刪除檢視:drop view 檢視名稱
            5.檢視的優缺點:(面試題)
                1.優點:
                    1.簡化查詢操作,對於複雜的查詢,往往是由多個數據表進行關聯而得到,
                    對於這個複雜的查詢結果儲存為一個檢視,便於下一次查詢時簡化查詢操作
                    2.邏輯上的獨立性,遮蔽了真實表結構更改帶來的影響
                    3.檢視能夠對機密資料提供一定的安全保護,因為檢視是虛擬的,物理上是
                    不存在的,我們可以將基表中重要的欄位不給使用者檢視
                2.不足:
                    1.效能差,對檢視的查詢最終轉換為對基表的查詢,如果這個檢視由多個復
                    雜的表查詢所定義,那麼即使是檢視查詢一個簡單的,也會花費一定時間
                    2.額外增加資料庫的複雜度,比如有50個基本表,就得要50 個檢視 一共
                    就有100個表了

        2.事物:
            1.事物是什麼?
                事物是一個操作序列,這些操作要麼都執行,要麼都不執行,他是一個不可分割
                的執行單位
            2.事物的ACID特性(面試題)
                1.原子性(Atomic):語句不可分割,要麼同時執行,要麼同時不執行
                2.一致性(Consistency):資料庫總是從一個一致性的狀態轉換到另一個一致性
                的狀態,(也可以說是從一個預期性的狀態到另一個預期性的狀態,比如銀行取錢,兩個賬戶預期總和都是600,一個使用者有100,另一個有500,現在要從有500的使用者轉100給另一個100的使用者,到最後他們兩者的預期總和應該還是600,這就是所謂的一致性,要麼都有,要麼都沒有)
                3.隔離性(lsolation):一個事物所做的修改在最終提交前,對其他事物是不可
                見的
                4.永續性(Durability):一旦事物提交,其所做的修改會永久儲存到資料庫中
            3.mysql事物的使用:
                1.在python訪問mysql資料庫中,預設開啟事物,所以對於增刪改。只要提交事
                物即可(connection.commit)
                2.開啟事物命令:
                    1.start transaction;
                    2.begin;
                3.提交事物命令:commit:把修改的資料持久化的儲存在資料庫中
                4.事物的回滾:
                    rollback:回滾到事物執行的初始狀態(指還沒有永續性的儲存在資料庫
                    中,只是在快取區中)
                    當我們不需要mysql命令列自動提交的時候 鍵入set autocommit=0即可
                5.原子的ACID特性
                    事務有原子性、一致性、隔離性、永續性
                    原子性強調事務中的多個操作時一個整體
                    一致性強調資料庫中不會儲存不一致狀態
                    隔離性強調資料庫中事務之間相互不可見
                    永續性強調資料庫能永久儲存資料,一旦提交就不可撤銷

        3.索引:
            1.何為索引:
                索引是一種特殊的檔案(innoDB資料表上的索引是表空間的一個組成部分),他們
                包含著對資料表中所有的記錄的引用指標,作用是能夠加快資料庫的查詢速度
            2.索引的原理:
                內部具體實現方案:B+數
            3.索引使用:
                1.檢視索引:
                    show index from 表名;
                    show index from goods;

                2.建立索引:
                    create index 索引名稱 on 表名(欄位名稱(長度))
                    create index name_index on goods(name(150))

                3.刪除索引:
                    drop index 索引名稱 on 表名字
                    drop index name_index on goods;

                4.索引的注意點(面試題):
                    1.索引最主要解決的問題:當資料量較大時,且這些資料不需要經常修改,
                    使用索引來加快查詢速度
                    2.對於較小的表,查詢開銷不是很大,也沒有必要建立另外的索引
                    3.建立太多索引將會影響更新和插入的速度,因為他需要同樣更新每個索引
                    檔案
                    4.對於一個經常需要更新和插入的表格,就沒有必要為一個很少使用的
                    where字句單獨建立索引
                    5.建立索引會佔用磁碟空間