<1>概念 <2>使用場景 <3>分類 1.default 2.not null 3.unique 4.主鍵約束 5.auto_increment:自增長約束 6.unsigned:無符號約束 7.zerofill:零填充約束 8.外鍵約束 總結:資料庫的約束 ...
<1>概念
是一種限制,它是對錶的行和列的數據做出約束,確保表中的數據的完整性和唯一性。
<2>使用場景
創建表的時候,添加約束
<3>分類
1. default:預設約束,域完整性
2. not null:非空約束,域完整性
3. unique:唯一約束,實體完整性
4. primary key:主鍵約束,實體完整性
5. foreign key:外鍵約束,參照完整性
6. check:檢查約束(MySQL不支持),域完整性
7. atuo_increment:自增長約束
8. unsigned:無符號約束
9. zerofill:零填充約束
資料庫中有三個完整性:域、實體、參照完整性
域(列)完整性:
域完整性是對數據表中欄位屬性的約束。
實體完整性在MySQL中實現:
通過主鍵約束和候選鍵約束實現的
參照完整性
也就是說是MySQL的外鍵
1.default
<1>概念
指定某列的預設值,插入數據的時候,此列沒有值,則用default指的的值來填充。
<2>添加
在創建表的時候添加 : create .....default
create table t1(
id int default 1,
name varchar(20) default '老王'
);
通過alter語句添加:alter....modify/change.........
alter table t1 modify id int default 2;
alter table t1 change name name varchar(32) default '大拿';
<3>刪除: alter.....modify/change
alter table t1 modify id int;
alter table t1 change name name varchar(32);
2.not null
<1>概念
指定某列的值不為空,在插入數據的時候必須非空 "" 不等於 null ,0不等於 null
<2>添加
在創建表的時候添加 : create .....not null
create table t1(
id int not null,
name varchar(20) not null
);
通過alter語句添加:alter....modify/change.........
alter table t2 modify id int;
alter table t2 change name name varchar(32) null;
<3>刪除: alter.....modify/change
3.unique
<1>概念
指定列或者列組合不能重覆,保證數據的唯一性
不能不限重覆的值,但是可以有多個null
同一張表可以有多個唯一的約束
<2>添加唯一約束
在創建表的時候添加 : create .....unique
create table t3(
id int unique,
name varchar(32) not null
);
insert t3 value (1,'老王');
insert t3 value (1,'老李'); -- id唯一約束,添加異常
create table t3(
id int,
name varchar(32) not null,
constraint id_unique unique(id,name) -- 添加複合約束
);
通過alter語句添加:alter....modify/change......... / alter .... add unique.....
alter table t3 modify id int unique;
alter table t3 add unique(name);
alter table t3 add constraint un_id unique(id);
<3>刪除唯一約束:alter .... drop...index 名稱 / drop index 名稱 on 表名
alter table t3 drop index id_unique
<4>註意:如果刪除的唯一約束列具有自增長約束,則必須要先刪除自增長約束,再去刪除唯一約束。
4.主鍵約束
<1>概念
當前行的數據不為空並且不能重覆
相當於:唯一約束+非空約束
<2>添加主鍵約束
在創建表的時候添加 : create .....primary key
create table t4(
id int primary key,
name varchar(20)
);
create table t4(
id int,
name varchar(32),
[constraint id_unique] primary key (id,name) -- 聯合約束
);
通過alter語句添加:alter....modify/change......... / alter .... add primary key.....
alter table t4 modify id int primary key;
alter table t4 add constraint pk_id_name primary key(id,name);
<3>刪除主鍵:alter ... drop primary key
alter table t4 drop primary key
<4>註意:如果刪除的主鍵列具有自增長約束,則必須要先刪除自增長約束,再去刪除主鍵約束。
5.auto_increment:自增長約束
<1>概述
列的數值自動增長,列的類型只能是整數類型
通常給主鍵添加自增長約束。
<2>添加
在創建表的時候添加 : create .....auto_increment
create table t5(
id int auto_increment,
name varchar(20)
);
通過alter語句添加:alter....modify/change......... auto_increment
alter table t5 change id id int auto_increment;
<3>刪除:alter ... modify/change....
alter table t5 modify id int;
<4>註意:
一張表只能有一個自增長列,並且該列需要定義約束。
6.unsigned:無符號約束
<1>概念
指定當列的數值未非負數
age tinyint 1 -128~127 UNSIGNED 0~255
<2>添加
在創建表的時候添加 : create .....UNSIGNED
create table t5(
id int,
age tinyint UNSIGNED
);
通過alter語句添加:alter....modify/change.........
alter table t5 change age age int tinyint UNSIGNED;
alter table t5 modify age tinyint UNSIGNED;
<3>刪除:alter ... modify/change....
alter table t5 modify age tinyint;
alter table t5 change age age int;
7.zerofill:零填充約束
<1>概述:
指定當前列的數值的顯示格式,不影響當前列顯示範圍
<2>
在創建表的時候添加 : create .....zerofill
create table t6(
id int,
age tinyint zerofill
);
<3>刪除:alter ... modify/change....
alter table t5 modify age tinyint;
alter table t5 change age age int;
8.外鍵約束
通過建立外鍵,設置表於表之間的約束性,限制數據的錄入
員工表(從表) 部門表(主表)
員工號 員工姓名 部門名稱 部門號 部門名稱
1 張三 1 1 人力
2 李四 2 2 銷售
3 王五 3
<1>概述
建立表和表之間的關係,建立參照完整性。一個表可以有多個外鍵,每個外鍵必須參照另一個主鍵。
被外鍵約束的列,取值必須參照其主表列中的值。
註意:通常先創建主表,再創建從表
create table dept(
deptno int primary key auto_increment,
dname varchar(32),
loc varchar(32)
);
create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
);
<2>添加外鍵約束
create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
[constraint fk_name] foreign key (deptno) references dept(deptno); -- 添加外鍵約束
);
使用alter add constraint....
alter table emp add constraint fk_name foreign key (deptno) references dept(deptno);
<3>刪除外鍵約束
alter drop foreign key fk_name
在創建表時,不去明確的指定外鍵約束的名稱,系統輝自動的隨機生成一個外鍵的名稱,
使用 show create table 表名。查看具體的外鍵名稱。
alter table emp drop foreign key fk_name;
<4>設置外鍵中的級聯關係
1.on delete cascade:刪除主表中的數據時,從表中的數據隨之刪除。
2.on update cascade:更新主表中的數據時,從表中的數據隨之刪除。
3.on delete set null:刪除主表中的數據時,從表中的數據置空
級聯刪除
create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
[constraint fk_name] foreign key (deptno) references dept(deptno) on delete cascade; -- 添加外鍵約束
);
註意:
插入數據時,先插入主表的數據,在插入從表的數據。
刪除數據時候,先刪除從表的數據,在刪除主表中的數據。
總結:資料庫的約束
主鍵約束、自增長約束、外鍵約束、唯一約束、非空約束、預設約束