1. 程式人生 > >Mysql-----約束、索引

Mysql-----約束、索引

約束

作用:保證資料的完整性,一致性,有效性,

約束分類:

            1)預設約束(default):插入記錄時,如果不給該欄位,則使用預設值

            2)非空約束(not NULL): 不允許該欄位的值由NULL記錄

示例:

sex enum("M","F","S") not null defalut "S"

MySQL索引:

定義:對資料庫的表的一列或多列的值進行排序(Btree方式)的一種結構

優點:加快資料檢索的速度

缺點:

  • 索引需要佔領物理儲存空間
  • 對錶中資料進行增加、刪除和修改的時候,索引需要動態維護,降低了資料的維護速度
    1)開啟執行時間檢測: set profiling=1;
    2)執行查詢語句 :
    select name from t1 where name="lucy99999";
    3)檢視執行時間
    show profiles;
    4)在name欄位建立索引
    craete index name on t1(name);
    5)再執行查詢語句
    select name from t1 where name="lucy88888";
    6)檢視執行時間
    show profiles;
    7)關閉執行時間檢測:
    set profiling=0;

索引的型別:

1.普通索引(index)

1)使用規則:

  • 可以設定多個欄位
  • 欄位值無約束
  • key標誌:MUL

2)建立index

  1.       建立表時建立:create table 表名(... index(欄位名),index(欄位名));
  2.       已有表中建立:create index 索引名 on 表名(欄位名);
  3.       檢視索引:desc 表名 ------->key標誌:MUL          (show index from 表名)
  4.       刪除索引:drop index 索引名 on 表名

2.唯一索引(unique index)

1)使用規則:

  • 可以設定多個欄位
  • 約束:欄位值不允許重複,但可以為NULL
  • key標誌:UNI

2)建立唯一約束unique index

  1. 建立表時建立:unique index(欄位名),unique index(欄位名)
  2. 已有表中建立:create unique index 索引名 on 表名(欄位名)

3)檢視索引    desc 表名 ---->key標誌:NUI

4)刪除索引     drop unique index 索引名 on 表名

3.主鍵約束(primary key)

自增長屬性 auto_increment,配合主鍵一起使用)

使用規則:

  • 一個表中只能有一個primary key欄位
  • 約束:不允許重複,並且不能為NULL
  • key標誌:PRI
  • 通常設定記錄編號欄位id,能唯一所鎖定一條記錄

建立主鍵:[通常將id設定為主鍵]

  • 建立表時建立:(id int primary key auto_increment)auto_increate=起始值;
  • 已有表中重新指定起始值:alter table 表名 auto_increment=起始值;
  • 已有表建立主鍵:alter table 表名 add primary key(id);

刪除:

  • 刪除自增長屬性(modify):alter table 表名 modify id int;
  • 刪除主鍵索引:alter table 表名 drop primary key;

4.外籍索引(foreign key)

定義:讓當前表字段的值在另一個表的範圍內進行選擇

語法:

        foreign key(參考欄位名)

        references 主表 (被參考欄位名)

        on delete (級聯動作)

        on update (級聯動作)

級聯動作:
              1)cascade
                 資料級聯刪除、更新(參考欄位)
              2)restrict (預設)
                  從表有相關聯記錄,不允許主表操作
              3) set null
                  主表刪除、更新,從表相關聯記錄欄位值為null

刪除外來鍵:   alter table 表名 drop foreign key 外來鍵名;
找外來鍵名 :   show create table 表名
已有表新增外來鍵:
               alter table 表名 add
               foreign key(參考欄位) references 主表(被參考欄位)
               on delete ...
               on update ...


使用規則:
       1.主表、從表字段資料型別要一致
        2.主表被參考欄位 :主鍵