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進行操作