1. 程式人生 > >navicat中設計表時,索引,外來鍵,觸發器的建立和作用

navicat中設計表時,索引,外來鍵,觸發器的建立和作用

navicat 為表新增索引

分析常用的查詢場景,為欄位新增索引,增加查詢速度。

可以新增單列索引,可以新增聯合索引。

右鍵,設計表中可以檢視和新增修改索引!

索引一定要根據常用的查詢場景進行新增!

寫了sql語句測試了一下,確實使用了索引!

可以通過名稱來判斷使用了什麼索引!

幫與跟,讓我感受到了索引的使用方法。

navicat軟體還是很不錯的!

我喜歡!

再談優化查詢,每一行程式碼,都能優化!每一個查詢都能優化!寫完介面之後,可以檢查一下,哪裡執行效率低了。資料少還看不出來,資料量一多。不好的設計就會展現的淋漓盡致!

問題1:mysql索引型別normal,unique,full text的區別是什麼?

normal:表示普通索引

unique:表示唯一的,不允許重複的索引,如果該欄位資訊保證不會重複例如身份證號用作索引時,可設定為unique

full textl: 表示 全文搜尋的索引。 FULLTEXT 用於搜尋很長一篇文章的時候,效果最好。用在比較短的文字,如果就一兩行字的,普通的 INDEX 也可以。

總結,索引的類別由建立索引的欄位內容特性來決定,通常normal最常見。

索引的方式:

1、BTREE(B樹(可以是多叉樹))  {主流使用}

2、HASH(key,value) 這種方式對範圍查詢支援得不是很好

問題2:在實際操作過程中,應該選取表中哪些欄位作為索引?

為了使索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立什麼型別的索引,有7大原則:

1.選擇唯一性索引
2.為經常需要排序、分組和聯合操作的欄位建立索引
3.為常作為查詢條件的欄位建立索引
4.限制索引的數目
5.儘量使用資料量少的索引
6.儘量使用字首來索引
7.刪除不再使用或者很少使用的索引

9. 經常更新修改的欄位不要建立索引(針對mysql說,因為欄位更改同時索引就要重新建立,排序,而Orcale好像是有這樣的機制欄位值更改了,它不立刻建立索引,排序索引,而是根據更改個數,時間段去做平衡索引這件事的)

10、不推薦在同一列建多個索引

使用Navicat for mysql新增外來鍵約束

先介紹一下基本情況:

現在有兩個表一張是t_blog表(部落格表),一張是t_blogType表(部落格類別)

現在我想把t_blog表中的typeID屬性設定為外來鍵,關聯t_blogType表中的id屬性。

        1,右鍵t_blog表,設計表,選擇外來鍵屬性

       

        2,然後會出現一個設定外來鍵的介面,一共有七列。簡單介紹一下這幾列的意思:

        “名”:  可以不填,你一會儲存成功系統會自動生成。

        “欄位”:就是你要把哪個鍵設定為外來鍵。這裡選擇‘typeId’

         “參考資料庫”: 外來鍵關聯的資料庫

         “參考表”: 關聯的表 這裡是t_blogType表

        “參考欄位”:關聯的的欄位,這裡是id

        “刪除時":就是刪除的時候選擇的動作。這裡我的選擇是setNull,意思就是當關聯的表刪除以後,t_blog->typeID欄位會設定為null。

       “ 更新時”:就是更新的時候選擇的動作。這裡我的選擇是CASCADE,意思就是當關聯的表更新以後,t_blog->typeID欄位會設定為級聯更新。 

MySQL外來鍵約束刪除時和更新時各取值的含義

1、準備測試工作

建立2個表,分別為studnet 學生表和monitor 班長表

學生表有學號和姓名2個屬性;

班長表有班級和學號2個屬性。

班長表設定外來鍵學號,連線主表學生表的學號屬性。

並插入資料如圖:

2、刪除時屬性,可能取值如上圖為:預設(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL屬性。

當取值為No Action或者Restrict時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。

當取值為Cascade時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也刪除外來鍵在子表(即包含外來鍵的表)中的記錄。

當取值為Set Null時,則當在父表(即外來鍵的來源表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外來鍵值為null(不過這就要求該外來鍵允許取null)。

3、更新時屬性,可能取值如上圖為:預設(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL屬性。

當取值為No Action或者Restrict時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許更新。

當取值為Cascade時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也更新外來鍵在子表(即包含外來鍵的表)中的記錄。

當取值為Set Null時,則當在父表(即外來鍵的來源表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外來鍵值為null(不過這就要求該外來鍵允許取null)。

更新時同理!!!不測試了!

4、總結

外來鍵的使用對於減少資料庫冗餘性,以及保證資料完整性和一致性有很大作用。

另外注意,如果兩張表之間存在外來鍵關係,則MySQL不能直接刪除表(Drop Table),而應該先刪除外來鍵,之後才可以刪除。

所以一般預設就好(RESTRICT)。

如何使用Navicat為資料庫表建立觸發器

方法/步驟

說一下,觸發器在本表中建立,但是隻能在另一張表進行操作。

示例如下:

在user下建立的觸發器。只能對user1進行操作

  1. 開啟Navicat

    如何使用Navicat為資料庫表建立觸發器?

  2. 開啟資料表所在的資料庫,右擊需要新增欄位的資料庫表,然後點選【設計表】

    如何使用Navicat為資料庫表建立觸發器?

  3. 此時進入表設計介面

    如何使用Navicat為資料庫表建立觸發器?

  4. 點選【觸發器】標籤頁,輸入觸發器名稱,如trigger1

    如何使用Navicat為資料庫表建立觸發器?

  5. 選擇觸發條件,before還是after

    如何使用Navicat為資料庫表建立觸發器?

  6. 選擇在哪些表操作事件時觸發,可選插入、更新和刪除

    如何使用Navicat為資料庫表建立觸發器?

  7. 在下方的【定義】,輸入觸發時執行的sql語句,如insert into oldtable(code) values(newtable.code) ,然後點選【儲存】,建立觸發器就完成了

    如何使用Navicat為資料庫表建立觸發器?