為防止錯誤的數據被插入到數據表,MySQL中定義了一些維護數據庫完整性的規則;這些規則常稱為表的約束。常見約束如下:
主鍵約束
主鍵約束即primary key用于唯一的標識表中的每一行。被標識為主鍵的數據在表中是唯一的且其值不能為空。這點類似于我們每個人都有一個身份證號,并且這個身份證號是唯一的。
主鍵約束基本語法:
字段名 數據類型 primary key;
設置主鍵約束(primary key)的第一種方式
示例:MySQL命令:
create table student(
id int primary key,
name varchar(20)
);
非空約束
非空約束即 NOT NULL指的是字段的值不能為空,基本的語法格式如下所示:
字段名 數據類型 NOT NULL;
示例:MySQL命令:
create table student02(
id int
name varchar(20) not null
);
默認值約束
默認值約束即DEFAULT用于給數據表中的字段指定默認值,即當在表中插入一條新記錄時若未給該字段賦值,那么,數據庫系統會自動為這個字段插人默認值;其基本的語法格式如下所示:
字段名 數據類型 DEFAULT 默認值;
示例:MySQL命令:
create table student03(
id int,
name varchar(20),
gender varchar(10) default 'male'
);
唯一性約束
唯一性約束即UNIQUE用于保證數據表中字段的唯一性,即表中字段的值不能重復出現,其基本的語法格式如下所示:
字段名 數據類型 UNIQUE;
示例:MySQL命令:
create table student04(
id int,
name varchar(20) unique
);
外鍵約束
外鍵約束即FOREIGN KEY常用于多張表之間的約束。基本語法如下:
-- 在創建數據表時語法如下:
CONSTRAINT 外鍵名 FOREIGN KEY (從表外鍵字段) REFERENCES 主表 (主鍵字段)
-- 將創建數據表創號后語法如下:
ALTER TABLE 從表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY (從表外鍵字段) REFERENCES 主表 (主鍵字段);
示例:創建一個學生表 MySQL命令:
create table student05(
id int primary key,
name varchar(20)
);
示例:創建一個班級表 MySQL命令:
create table class(
classid int primary key,
studentid int
);
示例:學生表作為主表,班級表作為副表設置外鍵, MySQL命令:
alter table class add constraint fk_class_studentid foreign key(studentid) references student05(id);
數據一致性概念
大家知道:建立外鍵是為了保證數據的完整和統一性。但是,如果主表中的數據被刪除或修改從表中對應的數據該怎么辦呢?很明顯,從表中對應的數據也應該被刪除,否則數據庫中會存在很多無意義的垃圾數據。
刪除外鍵
語法如下:
alter table 從表名 drop foreign key 外鍵名;
示例:刪除外鍵 MySQL命令:
alter table class drop foreign key fk_class_studentid;
關于外鍵約束需要注意的細節
1、從表里的外鍵通常為主表的主鍵
2、從表里外鍵的數據類型必須與主表中主鍵的數據類型一致
3、主表發生變化時應注意主表與從表的數據一致性問題