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)刪除資料時:先刪除副表,再刪除主表