一、表格的约束
constraints, 约束, 用于对表格的数据进行限制, 保证表格数据的完整性和一致性.
语法:
constraints 约束名 约束类型 (约束字段) |
二、主键约束(primary key)
主键是用于唯一标识一条记录的字段, 必须保证既非空又唯一.
一张表中, 只能有一个主键
a) 在表级别定义主键约束, 对约束统一管理
create table student ( sno number(4), sname varchar2(12), gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50), constraints pk_student primary key (sno) ); |
b) 表级别简化版定义主键约束, 省略约束名
create table student ( sno number(4), sname varchar2(12), gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50), primary key (sno) ); |
c) 在列级别定义主键约束
create table student ( sno number(4) constraints pk_student primary key, sname varchar2(12), gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50) ); |
d) 在列级别简化版定义主键约束
create table student ( sno number(4) primary key, sname varchar2(12), gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50) ); |
e) 联合主键, 只能在表级别定义, 因为一个表只能有一个主键
create table student ( sno number(4), sname varchar2(12), gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50), constraints pk_student primary key (sno, email) ); |
二、非空约束(not null)
字段值不允许为空, 非空约束只能在列级别定义
create table student ( sno number(4), sname varchar2(12) not null, gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50), constraints pk_student primary key (sno) ); |
三、唯一约束(unique)
create table student ( sno number(4), sname varchar2(12) not null, gender char(3), age number(3), sdate date, clazz varchar2(20), email varchar2(50), -- unique, constraints pk_student primary key (sno), constraints uk_student_email unique (email) ); |
四、检查约束(check)
用于限定字段值的取值范围
create table student ( sno number(4), sname varchar2(12) not null, gender char(3) check (gender in ('男', '女')), age number(3), sdate date, clazz varchar2(20), email varchar2(50), constraints pk_student primary key (sno), constraints uk_student_email unique (email), constraints ck_student_age check (age between 18 and 30) ); |
五、外键约束(foreign key)
用于约束表和表之间的关系. 两张表的依赖关系. 以emp表和dept表为例, emp表依赖dept表. 因此, dept表可以被称之为主表, emp表被称之为从表.
注意:
- Ø 主表中, 只有主键或者唯一键才可以被从表参考.
- Ø 从表中作为外键的列, 类型一定要和主表的被参考列相同.
a) 建立主表 clazz
create table clazz ( cno number(3) primary key, cname varchar2(20) not null, croom number(3) ); |
b) 创建从表, 并定义外键 student
create table student ( sno number(4), sname varchar2(12) not null, gender char(3) default '男' check (gender in ('男', '女')), age number(3), sdate date, email varchar2(50), cno number(3), constraints pk_student primary key (sno), constraints uk_student_email unique (email), constraints ck_student_age check (age between 18 and 30), constraints fk_student_cno foreign key (cno) references clazz (cno) ); |
c) 也可以在列级别定义外键, 如下:
create table student ( sno number(4), sname varchar2(12) not null, gender char(3) default '男' check (gender in ('男', '女')), age number(3), sdate date, email varchar2(50), cno number(3) references clazz(cno), constraints pk_student primary key (sno), constraints uk_student_email unique (email), constraints ck_student_age check (age between 18 and 30) ); |