表的约束条件(CONSTRAINT)
1)主键约束
主键(Primary Key,简称PK)
特征:
主键约束=不能重复+不能为空
一张表中只能存在一个主键,主键可以是一列,也可以是多列组合(联合主键)。
主键约束定义方式有两种:
列级约束和表级约束
列级约束:
create table stu_xu(
id number(4) primary key
);
insert into stu_xu values(1001);
insert into stu_xu values(1001);//不能重复
insert into stu_xu values(null);//不能为空值
表级约束:
create table stu_xu(
id number(4),
constraint stu_xu_id_pk primary key(id)
);
联合主键:
constraint stu_xu_id_pk primary key(id,no)
//删除表
drop table stu_xu;
注意:表级定义约束建议命名规则:
表名_列名_约束类型名
1)主键约束
主键(Primary Key,简称PK)
特征:
主键约束=不能重复+不能为空
一张表中只能存在一个主键,主键可以是一列,也可以是多列组合(联合主键)。
主键约束定义方式有两种:
列级约束和表级约束
列级约束:
create table stu_xu(
id number(4) primary key
);
insert into stu_xu values(1001);
insert into stu_xu values(1001);//不能重复
insert into stu_xu values(null);//不能为空值
表级约束:
create table stu_xu(
id number(4),
constraint stu_xu_id_pk primary key(id)
);
联合主键:
constraint stu_xu_id_pk primary key(id,no)
//删除表
drop table stu_xu;
注意:表级定义约束建议命名规则:
表名_列名_约束类型名
2)非空约束
非空约束:NOT NULL,简称(NN)
注意:非空约束只能在列级上
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三');
//name字段为NULL,记录插入失败
insert into stu_xu(id) values(1002);
非空约束添加起个名字:
create table stu_xu(
id number(4) primary key,
name varchar2(20) constraint stu_xu_name_nn not null
);
非空约束:NOT NULL,简称(NN)
注意:非空约束只能在列级上
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三');
//name字段为NULL,记录插入失败
insert into stu_xu(id) values(1002);
非空约束添加起个名字:
create table stu_xu(
id number(4) primary key,
name varchar2(20) constraint stu_xu_name_nn not null
);
3)唯一约束
唯一约束:UNIQUE,简称UK
唯一约束定义方式两个:列级和表级
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null,
email varchar2(30) unique
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三','123456789@qq.com');
insert into stu_xu values(1002,'李四','123456789@qq.com');// 违反唯一约束条件
insert into stu_xu values(1003,'张三',null);
//email字段NULL重复插入没有问题
insert into stu_xu values(1004,'王五',null);
表级:
create table stu_xu(
id number(4),
name varchar2(20) not null,
email varchar2(30),
constraint stu_xu_id_pk primary key(id),
constraint stu_xu_email_uk unique(email)
);
4)检查约束
检查约束:CHECK,简称CK
检查约束定义方式两个:列级和表级
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null,
email varchar2(30) unique,
sex char(1) check(sex in('F','M'))
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三','123456789@qq.com','男');//实际值: 2, 最大值: 1
insert into stu_xu values(1002,'李四','123456549@qq.com','A');//违反检查约束条件
insert into stu_xu values(1003,'王五','123454889@qq.com','F');
表级:
create table stu_xu(
id number(4),
name varchar2(20) not null,
email varchar2(30),
sex varchar2(1),
constraint stu_xu_id_pk primary key(id),
constraint stu_xu_email_uk unique(email),
constraint stu_xu_sex_ck check(sex in('F','M'))
);
唯一约束:UNIQUE,简称UK
唯一约束定义方式两个:列级和表级
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null,
email varchar2(30) unique
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三','123456789@qq.com');
insert into stu_xu values(1002,'李四','123456789@qq.com');// 违反唯一约束条件
insert into stu_xu values(1003,'张三',null);
//email字段NULL重复插入没有问题
insert into stu_xu values(1004,'王五',null);
表级:
create table stu_xu(
id number(4),
name varchar2(20) not null,
email varchar2(30),
constraint stu_xu_id_pk primary key(id),
constraint stu_xu_email_uk unique(email)
);
4)检查约束
检查约束:CHECK,简称CK
检查约束定义方式两个:列级和表级
列级:
create table stu_xu(
id number(4) primary key,
name varchar2(20) not null,
email varchar2(30) unique,
sex char(1) check(sex in('F','M'))
);
//删除表
drop table stu_xu;
//插入数据
insert into stu_xu values(1001,'张三','123456789@qq.com','男');//实际值: 2, 最大值: 1
insert into stu_xu values(1002,'李四','123456549@qq.com','A');//违反检查约束条件
insert into stu_xu values(1003,'王五','123454889@qq.com','F');
表级:
create table stu_xu(
id number(4),
name varchar2(20) not null,
email varchar2(30),
sex varchar2(1),
constraint stu_xu_id_pk primary key(id),
constraint stu_xu_email_uk unique(email),
constraint stu_xu_sex_ck check(sex in('F','M'))
);
5)外键约束
外键约束:FOREIGN KEY,简称FK
外键约束定义在两张表的两个字段上 ,用于保证相关的两个字段之间的关系。
create table temp_dept(
deptno number(4) primary key,
dname varchar2(20) not null
);
create table temp_emp(
empno number(4) primary key,
ename varchar2(10) not null,
deptno number(4),
foreign key(deptno) references temp_dept(deptno)
);
//在员工表中插入一条记录
insert into temp_emp values(1001,'张三',10);//违反完整约束条件
//先创建10号部门数据,然后在员工表中插入10号部门的员工
insert into temp_dept values(10,'研发部');
insert into temp_emp values(1001,'张三',10);
外键约束:FOREIGN KEY,简称FK
外键约束定义在两张表的两个字段上 ,用于保证相关的两个字段之间的关系。
create table temp_dept(
deptno number(4) primary key,
dname varchar2(20) not null
);
create table temp_emp(
empno number(4) primary key,
ename varchar2(10) not null,
deptno number(4),
foreign key(deptno) references temp_dept(deptno)
);
//在员工表中插入一条记录
insert into temp_emp values(1001,'张三',10);//违反完整约束条件
//先创建10号部门数据,然后在员工表中插入10号部门的员工
insert into temp_dept values(10,'研发部');
insert into temp_emp values(1001,'张三',10);
create table temp_emp(
empno number(4) primary key,
ename varchar2(10) not null,
deptno number(4),
constraint temp_emp_deptno_fk foreign key(deptno) references temp_dept(deptno)
);//temp_emp_deptno_fk不能重复
empno number(4) primary key,
ename varchar2(10) not null,
deptno number(4),
constraint temp_emp_deptno_fk foreign key(deptno) references temp_dept(deptno)
);//temp_emp_deptno_fk不能重复