一、MySQL的表級約束和列級約束
對於一個列所創建的約束,稱之爲列級約束,而對於兩個或兩個以上的列所創建的約束,我們稱之爲表級約束,列級約束在使用的時候,既可以在列定義的時候聲明,也可以在列定義以後聲明,而表級的約束只能在列定義以後來聲明,在實際開發中,用列級約束比較多,表級約束很少用,除此之外,在所有的約束中,並不是說每種約束都存在着表級或列級約束,其中,NOT NULL 非空約束,DEFAULT約束這兩種約束就不存在表級約束,它們只有列級約束,而對於其他的三種,像主鍵,唯一,外鍵,它們都可以存在表級和列級約束。二、MySQL常見的幾種約束
1、主鍵約束 primary key
主鍵約束相當於 唯一約束 + 非空約束 的組合,主鍵約束列不允許重複,也不允許出現空值。每個表最多隻允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別創建。當創建主鍵的約束時,系統默認會在所在的列和列組合上建立對應的唯一索引。
常用語句
1)添加主鍵約束
create table emp(
id int primary key,
name varchar(20)
);
alter table emp add primary key (id);
複合主鍵:
create table emp(
id int,
name varchar(20),
pwd varchar(10),
primary key(id,name)
);
alter table emp add primary key (id,name);
2) 修改主鍵約束
alter table emp modify id int primary key;
3) 刪除主鍵約束
alter table emp drop primary key;
2、外鍵約束 foreign key
外鍵約束是保證一個或兩個表之間的參照完整性,外鍵是構建於一個表的兩個字段或是兩個表的兩個字段之間的參照關係
常用語句
1)創建外鍵約束
基本用法
主表
create table class(
id int primary key,
name varchar(20)
);
從表
create table student(
id int primary key,
name varchar(20),
class_id int,
foreign key (class_id) references class (id)
);
多列外鍵組合,必須用表級別的約束語法
主表
create table class (
id int,
name varchar(20),
number int,
primary key (name,number)
);
從表
create table students(
id int auto_increment primary key,
name varchar(20),
class_name varchar(20),
class_number int,
foreign key (class_name,class_number) references class (name,number)
);
2)增加外鍵約束
alter table student add foreign key (class_name,class_number) references class (name,number);
3)刪除外鍵約束
alter table student drop foreign key (class_id);
3、 唯一約束unique
唯一約束是指定table的列或列組合不能重複,保證數據的唯一性。唯一約束不允許出現重複的值,但是可以爲多個null。同一個表可以有多個唯一約束,多個列組合的約束。在創建唯一約束時,如果不給唯一約束名稱,就默認和列名相同。唯一約束不僅可以在一個表內創建,而且可以同時多表創建組合唯一約束。
1) 創建表時設置
create table emp(
id int not null,
name varchar(20),
password varchar(10),
unique (name,password)
);
2)添加唯一約束
alter table emp add unique (name,password);
3)修改唯一約束
alter table emp modify name varchar (25) unique;
4)刪除唯一約束
alter table emp drop index name;
4、非空約束 not null 與 默認值 default
非空約束用於確保當前列的值不爲空值,非空約束只能出現在表對象的列上。
Null類型特徵:所有的類型的值都可以是null,包括int、float 等數據類型
1)創建table表,ID爲非空約束,name爲非空約束,且默認值爲‘abc’
create table emp (
id int not null,
name varchar(20) not null default 'abc',
sex char
);
2)增加非空約束
alter table emp modify sex varchar (2) not null;
3)取消非空約束
alter table emp modify sex varchar (2) null;
4)取消非空約束,增加默認值
alter table emp modify sex varchar(2) default 'abc' null;