數據庫複習筆記總結

本文地址:http://www.cnblogs.com/maplefighting/p/7825313.html html

mysql:mysql

一、登陸:mysql -u root -psql

二、建立數據庫:mysqladmin -u root -p create xx;數據庫

三、刪除數據庫:                                   drop   xx;緩存

四、選擇數據庫:use xx安全

五、建立數據庫:create table if not exist '.....' (性能優化

                            'id' INT UNSIGNED AUTO_INCREMENT,服務器

                            ....... 網絡

                        )併發

                     PRIMARY KEY('.....','........')  主鍵

六、刪除數據庫:DROP TABLE xx;

七、插入數據:INSERT INTO TABLE (       ,        )       VALUE (   ,      )

八、查詢:SELECT  col_name,col_id

               FORM table_name

               [ where .......]

               [ OFFSET M ] [ LIMIT N ]

               偏移量             返回記錄數

   where BINARY .....     區分大小寫

九、UPDATE:UPDATE table_name SET  .....=......

                      [ where .....]

十、DELETE:DELETE FROM table_name [ WHERE .....]

十一、LIKE:SELECT ......FROM ...... WHERE ....LIKE '%COM';

十二、排序:ORDER BY ....ASC/DESC

1三、GROUP BY:SELECT coalesce(name,'總數'),sum( )  as  ....

                            FROM .....

                            GROUP BY .......

         coalesce(a,b,c)    a==null,選b --->b==null時,選c

1四、鏈接:SELECT a.xx,b.xx FROM tb1 a INNER JOIN tb2 b ON a.k = b.k   內鏈接,取交集

       LEFT JOIN 左鏈接,讀取左邊所有數據

       RIGHT JOIN 右鏈接

1五、事務:BEGIN;開始

                   COMMIT;提交事務

                   ROLLBACK;回滾

1六、ALTER:ALTER TABLE tb1 DROP i;

                                                      ADD i INT;

                                                     MODIFY c char(10);

                                                     CHANGE i  j  BIGINT;

         ALTER TABLE tb1 ALTER  i SET DEFAULT  100;       修改默認值

         ALTER TABLE tb1 RENAME  TO tb2;      修改表名

1七、臨時表  關閉客戶端程序時銷燬  temporary

1八、索引:CREATE INDEX index ON mytable(username(length))

1九、外鍵:FOREIGN KEY (parent_id)  REFERENCES parents(id)

20、WHERE子句中不能以彙集函數(SUM,AVG....)  爲條件

2一、完整性約束:CONSTRAINT c CHECK(Sno Between......)   NOT NULL

2二、IF(ex1, ex2, ex3 )  ex1爲TRUE時,返回ex2,不然返回ex3

            IF   condition   THEN   .......

           ELSEIF  con     THEN  ....

           ELSE     .......

           END IF

2三、CREATE  FUNCTION  "sp"  (n  INT,......) 

                  RETURNS text

       BEGIN

                DECLARE i INT DEFAULT 0;

               SET i = 1;

               while  i < 11 do

                      insert ........

                      set i = i + 1;

              end while;

              RETURN s;

     END $$

 

      repeat

              insert......;

             set i = i + 1;

             util i >= 5

    end repeat

-----------

2四、數據庫完整性:實體完整性,參照完整性,用戶定義的完整性

2五、完整性約束:非空約束,惟一約束,主鍵約束,外鍵約束

2六、規範化理論:(1) 清除不合適的數據依賴

                                (2) 減小重複        (3) 消除冗餘    (4) 解決操做異常

2七、範式:(1) 2NF 消除部分函數依賴

                             (Sno, Cno ) ----> Sdept,  Sno ---> Sdept     存在部分函數依賴

                   (2) 3NF  不存在部分函數依賴,沒有傳遞依賴

                   (3) BCNF:只有一個候選碼的3NF

                                       有多個候選碼的3NF,討論剩下屬性有沒依賴關係

                             (S, J ) --> T , (S, T ) --> J,  T--> J  不是BCNF

                            分解爲 ST(S, T)  TJ(T, J ) 

                  (4) 4NF 消除非平凡且非函數依賴的多值依賴

2八、數據庫設計:一、需求分析階段   二、概念結構設計階段  三、邏輯結構設計階段  四、物理結構設計階段  五、數據庫實施階段  六、數據庫運行和維護階段

2九、事務是用戶定義的一個數據庫操做序列,要麼全作,要麼全不作

        4個特性:原子性,一致性,隔離性,持久性 (ACID)

30、併發控制:封鎖

     排他鎖 -->寫鎖           共享鎖-->讀鎖

3一、樂觀鎖:每次拿到數據都認爲別人不會修改,不上鎖,更新時會判斷期間別人有沒去更新數據   使用版本號等機制 cas,mvcc      指定版本號

        悲觀鎖:每次都上鎖       表鎖,讀鎖,寫鎖

                 select  .........  for  update

3二、查找表中多餘記錄記錄

       SELECT  *  FROM  people   where peopleid  in (

              SELECT  peopleid   FROM   people  GROUP  BY  peopleid

                                                                        HAVING  count(peopleid) > 1

       )

3三、事務的隔離性:(1) 未提交讀:事務中的修改,即便沒提交,其餘事務也可見,會引發髒讀

                                    (2) 提交讀:一個事務從開始到提交以前,所作的修改對其餘事務不可見,會引發不可重複讀

                                    (3) 可重複讀 (mysql默認) :解決髒讀的問題,也保證可屢次讀取相同的數據。但會出現幻讀

                                    (4) 可串行化:每一行數據都加鎖

       幻讀:當某個事務讀取範圍內記錄時。另外一個事務插入,而後再讀取       (2)(3)纔會發生

      提交讀的讀鎖是讀完釋放,可重複讀是事務完釋放 (--這個不知道正確與否)

3四、併發操做帶來的數據不一致包括:(1) 幻讀 (新增,刪除)   (2) 不可重複讀 (修改)    (3)讀髒數據

3五、MVCC 多版本併發控制

       SELECT:a、InnoDB 只檢查版本早於當前版本的數據行

                        b、行的刪除版本要麼未定義,要麼大於當前事務版本號

       INSERT:保留當前系統版本號爲行版本號

       DELETE:保存行刪除標識

3六、B-樹 (讀作b樹):爲了減小磁盤I/O,把高瘦的二叉查找樹變成矮胖的     每一個節點都帶有具體數據(關鍵字)

           m階段B-樹特徵:

           (1) 根節點至少有兩個子女

           (2) 每一箇中間節點包含 k - 1 個元素和 k 個孩子 m/2 <= k <= m

           (3) 每一個葉子節點都包含 k - 1 個元素

           (4) 全部葉子節點都位於同一層

       InnoDB 使用 B+樹

      B+樹 

          (1) 有k個子樹的中間節點包含有 k 個元素,每一個元素只使用索引,全部數據保存在葉子節點

          (2) 全部葉子包含所有元素信息 及指針,自己以關鍵字從小到大排序

          (3) 全部中間節點元素同時存在於子節點,在子節點中是最大(或最小的) 元素

     區別:單個查詢 B+ 樹比B-樹優勢:

              a、中間節點沒有具體數據,能夠容納更多節點元素,即在數據量相同時,能夠更加矮胖,使 I/O次數更少

              b、穩定,每次都要查詢到葉子節點

             範圍查詢:B-樹須要查詢每一個節點,即一個一個查詢。B+樹能夠經過葉子鏈表查詢 (具體兩種樹的形狀可google或百度搜索)

3七、聚簇索引就是數據的物理存儲順序,一個表只能有一個  ------葉子節點  數據

       非聚簇索引的索引順序與數據物理排列順序無關  ----索引

3八、數據庫引擎 :MyISAM,InnoDB  (詳細結構可上網查詢)

       MyISAM是指向物理塊的指針

      InnoDB是聚簇索引,二級索引包含主鍵

      InnoDB主索引樹存全部數據,輔助索引存主鍵

      MyISAM存數據地址

3九、MyISAM和InnoDB的區別

       InnoDB支持事務,MyISAM不支持

       MyISAM只支持表鎖,InnoDB 行級鎖

      MyISAM 適合執行大量SELECT,InnoDB 支持大量SELECT或UPDATE

      MyISAM以文件形式存儲,備份和恢復可對某個表操做,能夠備份覆蓋恢復

40、MySQL性能優化

       (1) 查詢緩存  (2) 建立索引   (3) 避免SELECT *    (4) 拆分大的DELETE或INSERT語句  (5) 要一行數據時加上limit 1

      MySQL客戶端和服務器之間的通訊是半雙工的

4一、執行順序:from --> where --> group by --> having --> select --> order by

4二、statement 和 preparedStatement 的區別

        (1) 代碼的可讀性和可維護性

        (2) preparedStatement 是預編譯的,屢次執行相同 sql 語句,會直接使用數據庫緩衝區

        (3) 安全性, preparedStatement 使用存儲過程執行全部操做,可防止 sql 注入

4三、事務的實現:鏡像拷貝和事務日誌

      InnoDB經過 undo log 和 redo log 實現

     事務中,每執行SQL語句對數據產生影響,就會記錄相反操做到 undo log 中。每執行一條 SQL,會將操做記錄到 redo log 中,一旦提交,持久化到磁盤

4四、Mysql存儲過程

       存儲過程是預編譯的,較快執行速度

       能減小網絡流量

      數據庫專業人員能夠隨時修改存儲過程,不用修改源程序

      create  procedure  proc1 (OUT  s  int)

     BEGIN

            .........

     END

      存儲過程和函數區別

      存儲過程能夠返回多個,函數只能返回一個值

      存儲過程只能call調用,函數能夠sql調用

4五、mysql表水平拆分和垂直拆分

      水平拆分爲行的拆分,垂直拆分爲列的拆分

      分區只是爲了存放數據的區塊,仍是一張表

      分表:單表的併發能力提升了,磁盤 I/O 也提升

      分區:突破磁盤的讀寫能力

4六、hash 索引

       (1) 僅僅知足 「=」 ,「IN」 和 「<=>」 查詢。不能使用範圍查詢

       (2) 沒辦法利用索引完成排序

       (3) 不能利用部分索引查詢

       (4) 在大量重複鍵值狀況下,哈希索引效率低。由於碰撞多。若是是等值查詢,哈希索引相對 B-Tree 等有絕對優點

 

參考書籍:數據庫系統概論(第5版) 王珊 薩師煊 編著

                  MySQL必知必會高性能mysql  (推薦)

--------------------------------------------------------------------------------------------------------------

 以上爲maplefighting我的筆記整理,若有出錯,歡迎指正

相關文章
相關標籤/搜索