1 、約束的作用
對表中的數據進行限制,保證數據的正確性、有效性和完整性。一個表如果添加了約束,不正確的數據將無
法插入到表中。約束在創建表的時候添加比較合適。
2 、約束種類
2.1 主鍵約束 primary key
2.1.1 主鍵的作用
- 非空且唯一
- 一張表只能有一個字段為主鍵,(用來唯一標識數據庫中的每一條記錄)
- 通常不用業務字段作為主鍵,單獨給每張表設計一個 id 的字段,把 id 作為主鍵。主鍵是給數據庫和程序使用的,不是給最終的客戶使用的。所以主鍵有沒有含義沒有關系,只要不重復,非空就行
2.2.2 主鍵操作
- 創建表的時候創建主鍵
create table st5 (
id int primary key, -- id 為主鍵
name varchar(20),
age int
)
- 刪除主鍵
alter table st5 drop primary key;
- 創建表后添加主鍵
alter table st5 add primary key(id);
2.2.3 主鍵自增
主鍵如果讓我們自己添加很有可能重復,我們通常希望在每次插入新記錄時,數據庫自動生成主鍵字段的值
- AUTO_INCREMENT 表示自動增長(字段類型必須為整數類型)
create table st5 (
id int primary key auto-increment, -- 給id 創建自動增長
name varchar(20),
age int
)
-- 插入數據 之后查詢數據 發現id是自動增長的
insert into st5 (name,age) values ('小喬',18);
insert into st5 (name,age) values ('大喬',20);
- 修改自增長的默認值起始值
-- 指定起始值為 1000
create table st4 (
id int primary key auto_increment,
name varchar(20)
) auto_increment = 1000;
- 創建好以后修改起始值
alter table st4 auto_increment = 2000;
- 創建完表之后刪除自動增長
alter table st4 modify id int;
- 添加自動增長
alter table st4 modify id int auto_increment;
2.2 唯一約束
- 什么是唯一約束:表中某一列不能出現重復的值
2.2.1 唯一約束語法格式:字段名 字段類型 UNIQUE
-- 創建學生表 st7, 包含字段(id, name),name 這一列設置唯一約束,不能出現同名的學生
create table st7 (
id int,
name varchar(20) unique
)
-
注意:唯一約束可以有null值,但是只能有唯一一條記錄為null
-
刪除唯一約束:alter table st7 drop index name;
-
在表創建完之后創建唯一約束:alter table st7 modify name varchar(20) unique;
2.3 非空約束
- 什么是非空約束:某一列不能為 null。
-- 創建表學生表 st8, 包含字段(id,name,gender)其中 name 不能為 NULL
create table st8 (
id int,
name varchar(20) not null,
gender char(1)
)
-- 刪除st8 name的非空約束:alter table st8 modify name varchar(20);
- 默認值:字段名 字段類型 DEFAULT 默認值
-- 創建一個學生表 st9,包含字段(id,name,address), 地址默認值是廣州
create table st9 (
id int,
name varchar(20),
address varchar(20) default '廣州'
)
-- 添加一條記錄,使用默認地址
insert into st9 values (1, '李四', default);
-- 添加一條記錄,不使用默認地址
insert into st9 values (3, '李四光', '深圳');
疑問:如果一個字段設置了非空與唯一約束,該字段與主鍵的區別?
-
主鍵數在一個表中,只能有一個。不能出現多個主鍵。主鍵可以單列,也可以是多列。
-
自增長只能用在主鍵上
2.4 外鍵約束
什么是外鍵約束:
1)什么是外鍵:在從表中與主表主鍵對應的那一列,如:員工表中的 dep_id
2)主表: 一方,用來約束別人的表,從表: 多方,被別人約束的表
創建/刪除 約束的語法
1)新建表時增加外鍵:
[CONSTRAINT] [外鍵約束名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵字段名****)
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外鍵對應主表的主鍵
-- 創建外鍵約束
constraint emp_depid_fk foreign key (dep_id) references department(id)
)
2)已有表增加外鍵:
ALTER TABLE 從表 ADD [CONSTRAINT] [外鍵約束名稱] FOREIGN KEY (外鍵字段名) REFERENCES 主表(主表字段名);
3)刪除外鍵的語法:
ALTER TABLE 從表drop foreign key 外鍵名稱;
-- 刪除 employee 表的 emp_depid_fk 外鍵
alter table employee drop foreign key emp_depid_fk;
什么是級聯操作:
在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作
ON UPDATE CASCADE:級聯更新,只能是創建表的時候創建級聯關系。更新主表中的主鍵,從表中的外鍵
列也自動同步更新
ON DELETE CASCADE :級聯刪除