主键、外键、空值、唯一性约束

一:主键
1.语法
格式一:create table column primary key; ------ (列一级约束)
格式二:create table column , constraint primary key; -----(表一级约束)
2.练习
例:在empxx数据表中定义empno为主键约束
create table empxx (epmno number(4) primary key);
例:在empxx数据表中定义empno为主键约束
drop table empxx;
create table empxx(empno number(4),constraint empxx_empno_pk primary key(empno));
create table deptxx (deptno number(4) primary key);
create table deptxx(deptno number(4),constraint deptxx_empno_pk primary key(deptno));
测试deptxx数据表是否可以插入空值或者重复值
测试1:插入重复值
第一次插入:insert into deptxx values(10);
结果:成功
第二次插入:insert into deptxx values(10);
结果:ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C006998)
测试二:插入空值
insert into deptxx values();
结果:ORA-00936: 缺失表达式

二:空值约束
1.语法:
格式一:create table column not null; ----(列一级约束)
2.练习
例:在empxx数据表中定义empno为主键约束, ename添加not null
尝试不加非空数据表的创建
create table empxx(empno number(4), ename varchar(20), constraint empxx_empno_pk primary key(empno));
插入测试数据,查看空值是否可以添加到empxx数据表的ename列
insert into empxx values(1000,null);
结果:成功插入
删除empxx
drop table empxx;
尝试添加非空约束给ename列
create table empxx(empno number(6), ename varchar(20) not null,
constraint empxx_empno_pk primary key(empno));
插入测试数据,查看空值是否可以添加到empxx数据表的ename列
insert into empxx values(1000,null);
结果:失败 ORA-01400: 无法将 NULL 插入 (“SCOTT”.“EMPXX”.“ENAME”)

三:唯一性约束
1.语法
格式一:create column unique; -------(列一级约束)
格式二:create table colum, constraint unique; ---------(表一级约束)
2.练习
例:尝试不加唯一性约束数据表的创建
drop table empxx;
create table empxx(empno number(4),sal number(8),
constraint empxx_empno_pk primary key(empno));
插入测试数据,查看是否可以添加重复值到empxx数据表的sal列
insert into empxx values(1000,2800);
insert into empxx values(1000,2800);
结果:ORA-00001: 违反唯一约束条件 (SCOTT.EMPXX_EMPNO_PK)
删除empxx
drop table empxx;
尝试添加唯一约束给sal列
create table empxx(empno number(6), sal number(8) unique,
constraint empxx_empno_pk primary key(empno));
插入测试数据,查看时候否可以添加重复值到empxx数据表的sal列
insert into empxx values(1000,2800);
insert into empxx values(1000,2800);
结果:ORA-00001: 违反唯一约束条件 (SCOTT.EMPXX_EMPNO_PK)
删除empxx
drop table empxx;
使用第二种第一个定义格式完成xmpxx数据表,sal列非空约束的定义
create table empxx(empno number(4), sal number(8),
constraint empxx_empno_pk primary key(empno),
constraint empxx_sal_uq unique(sal));
插入测试数据,查看是否可以添加重复值到empxx数据表的sal列
insert into empxx values(1000,2800);
insert into empxx values(1000,2800);

四:外键约束
1.概念
通过一个列标题建立关联的两张数据表,如果列标题是其中一张表的主键,那么这个列标题就是另一张数据表的外键
2.语法
格式一:create table column foreign key ------(列一级约束)
格式二:create table column , constraint foreign key -------(表一级约束)
(两张表如何建立关联:两张表中有相同的标题)
3.练习
假设deptxx数据表(deptno number(2) ,dname varchar(20))、
empxx数据表(empno number(4), ename varchar(30), deptno number(2)),建立两者之间的关联
第一步:创建deptxx数据表
create table deptxx(
deptno number(2) ,dname varchar(20),
constraint deptxx_deptno_pk primary key(deptno));
第二步:创建empxx数据表
create table empxx(
empno number(4), ename varchar(30), deptno number(2),
constraint empxx_empno_pk primary key(empno),
constraint empxx_deptno_fk foreign key(deptno) references deptxx(deptno));
4.外键约束特点
(1)插入、修改
主表约束子表(主表里没有的数据,我们是不能让他出现在子表中)
(2)删除
子表约束主表(只要是子表里面有数据,就不可以删除主表的记录)
例:在empxx数据表中插入数据
insert into empxx values(1000,‘ABC’,20);
错误:ORA-02291: 违反完整约束条件 (SCOTT.EMPXX_DEPTNO_FK) - 未找到父项关键字
我们应该先在peotxx数据表中添加20,information数据
insert into deptxx values(20,‘INFORMATION’);
再在empxx数据表中插入数据
insert into empxx values(1000,‘ABC’,20);

5.扩展选项 on delete cascade(级联删除)
功能:当我们想在删除主表记录的同时,一并删除子表中的记录,我们可以使用on delete cascade
例:创建外键约束并添加级联删除功能
第一步:
drop table empxx;
drop table deptxx;
第二步:创建两张带约束的数据表
(1)create table deptxx(
deptno number(2) ,dname varchar(20),
constraint deptxx_deptno_pk primary key(deptno));

(2)create table empxx(
empno number(4), ename varchar(30), deptno number(2),
constraint empxx_empno_pk primary key(empno),
constraint empxx_deptno_fk foreign key(deptno) references deptxx(deptno) on delete cascade);
插入测试数据
我们应该下奶deptxx数据表中添加20 , INFORMATION
insert into deptxx values(20,‘INFORMATION’);
再在empxx数据表中插入记录
insert into empxx values(1000,‘ABC’,20);
接下来尝试删除主表中的20部门的信息
delete deptxx where deptno=20;
五:检查约束(check)
功能:限定插入记录的取值范围(如性别只能选男或女)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值