1. 程式人生 > >MySQL中的資料約束

MySQL中的資料約束

  什麼是資料約束:

  對使用者操作表的資料進行約束

1.預設值:

  作用:當用戶對使用預設值的欄位不插入值的時候,就使用預設值。

  注意:1)對預設值欄位插入null是可以的。

     2)對預設值欄位可以插入非null

如:create table 表名稱(

      欄位名 型別,

      欄位名 型別,

      欄位名 型別 default '預設值'

      )

  當欄位沒有插入之的時候,會自動給該欄位分配預設值

insert into 表名稱(欄位名,欄位名) values(值,值);

2.非空

  作用:限制欄位必須賦值

  注意:1)非空字元必須賦值

     2)非空字元不能賦null

如:create table 表名稱(

      欄位名 型別,

      欄位名 型別,

      欄位名 型別  not null

      )

3.唯一

  作用:對欄位的值不能重複

  注意:1)唯一欄位可以插入null

     2)唯一欄位可以插入多個null

如:create table 表名稱(

      欄位名 型別,

      欄位名 型別 unique

      )

4.主鍵

  作用: 非空+唯一

  注意:1)通常情況下,每張表都會設定一個主鍵欄位。用於標記表中的每條記錄的唯一性。

     2)建議不要選擇表的包含業務含義的欄位作為主鍵,建議給每張表獨立設計一個非業務含義的id欄位。

如:create table 表名稱(

      欄位名 型別 primary key,

      欄位名 型別

      )

5.自增長

  作用:從零開始自動遞增填充,可以不賦值

  注意:delete from 表名稱;不能影響自增長約束

     truncate table 表名稱;可以影響自增長約束

如:create table 表名稱(

      欄位名 型別 zerofill primary key auto_increment,

      欄位名 型別

      )

6.外來鍵

  作用:約束兩種表的資料

  出現兩種表的情況:

  解決資料冗餘高的問題:獨立出一張表

  例如:員工表 和 部門表

  問題出現:在插入員工表資料的時候,員工表的部門ID欄位可以隨便插入!!!

  使用外來鍵約束:約束插入員工表的部門ID欄位值

  解決辦法:在員工表的部門ID欄位新增一個外來鍵約束

如:表名稱(主表)

  create table 表名稱1(

    欄位名a 型別(int) primary key,

    欄位名 型別

    )

  表名稱(副表)

  create table 表名稱2(

    欄位名 型別(int) primary key,

    欄位名 型別,

    欄位名b 型別(int),

    constraint 表2_表1_fk foreign key(欄位名b) references 表名稱1(欄位名a)

    )

  在已經建完表時新增外來鍵:

  alter table 表名稱2 add constraint 表2_表1_fk foreign key(欄位名b) references 表名稱1(欄位名a);

  注意:1)被約束的表稱為副表,約束別人的表稱為主表,外來鍵設定在副表上。

     2)主表的參考欄位通用為主鍵!

     3)新增資料時:先新增主表,再新增副表

     4)修改資料時:先修改副表,再修改主表

     5)刪除資料時:先刪除副表,再刪除主表