SQL语句复习【专题七】
SQL语句复习【专题七】
完整性约束分类
1)域完整性约束(非空not null,检查check)
2)实体完整性约束(唯一unique,主键primary key)
3)参照完整性约束(外键foreign key)
域完整性约束:学生的名字、学生的年龄、学生性别。
实体完整性约束:email,学号。
参照完整性约束:某一列的值必须是其他的表的 主键。
命名规则推荐采用:约束类型_约束字段
1)非空约束 NN_表名_列名
2)唯一约束 UK_表名_列名
3)主键约束 PK_表名
4)外键约束 FK_表名_列名
5)检查约束 CK_表名_列名
1:约束相关【创建表的时候添加约束】
---【主键约束】 primary key
drop table student purge;
create table student(
--sno varchar2(6) constraints pk_student primary key, -- 列级主键约束
sno varchar2(6),-- primary key,--简单的列级主键约束。约束的名字系统自动生成。
sname varchar2(12),
sage number(3),
sgender varchar2(3),
cno varchar2(10),
semail varchar2(20),
--constraints pk_student primary key (sno)--表级添加约束
primary key (sno)--简化的表级主键约束
);
insert into student values ('000001','林徽因',19,'女','c0001','bai@qq.com');
insert into student values (null,'林徽因',19,'女','c0001','bai@qq.com');
select * from student
--【联合主键约束】只有表级约束,没有列级约束
drop table student purge;
--sno 和 sname 作为联合主键 两个列的值的组合是唯一的 联合主键的所有的字段都不能为空
create table student(
sno varchar2(6),
sname varchar2(12),
sage number(3),
sgender varchar2(3),
cno varchar2(10),
semail varchar2(20),
constraints pk_student primary key (sno,sname)--表级添加约束
--primary key (sno,sname) 简化的联合主键约束
);
insert into student values ('000002','林徽因',19,'女','c0001','bai@qq.com');
insert into student values (null,'林徽因',19,'女','c0001','bai@qq.com');
--【非空约束】not null
--ename 非空约束,只有列级
drop table student purge;
create table student(
sno varchar2(6),
--sname varchar2(12) ,--constraints nn_student_sname not null,--非空的列级约束
sname varchar2(12) not null,--简化的非空约束
sage number(3),
sgender varchar2(3),
cno varchar2(10),
semail varchar2(20),
constraints pk_student primary key (sno)--表级添加约束
--constraints nn_student_sname not null(sname) 非空约束只能是列级约束,不能作为表级约束
);
--插入测试数据
insert into student values ('000001',null,19,'女','c0001','bai@qq.com');
select * from student
--【唯一约束】 unique
--email 唯一的。可以是 null,而且可以有多个 null
drop table student purge;
create table student(
sno varchar2(6),
sname varchar2(12) not null,--简化的非空约束
sage number(3),
sgender varchar2(3),
cno varchar2(10),
--semail varchar2(20) constraints uk_student_semail unique, --列级 唯一约束
semail varchar2(20) ,--unique,--简单列级 唯一约束
constraints pk_student primary key (sno),--表级添加约束
--constraints uk_student_email unique(semail)--表级的 唯一约束
unique (semail)--简化的表级唯一约束
);
--插入测试数据
insert into student values ('000001','小白',19,'女','c0001','bai@qq.com');
insert into student values ('000002','小白',19,'女','c0001','bai@qq.com');
insert into student values ('000002','小红',19,'女','c0001',null);
insert into student values ('000003','小王',19,'女','c0001',null);
select * from student
--【检查约束】 check
--控制域的取值范围
drop table student purge;
create table student(
sno varchar2(6),
sname varchar2(12) not null,--简化的非空约束
sage number(3),-- constraint ck_student_sage check (sage >=18 and sage <= 30),--[18-30]---列级检查约束
sgender varchar2(3) default '男',-- check (sgender in ('男','女')) ,--列级简化检查约束
cno varchar2(10),
semail varchar2(20) ,
constraints pk_student primary key (sno),--表级添加约束
constraints uk_student_email unique(semail),--表级的 唯一约束
check (sage between 18 and 30),
constraint ck_student_sgender check (sgender in ('男','女'))
);
--插入测试数据
insert into student values ('000001','小白',19,'女','c0001','bai@qq.com');
insert into student values ('000002','小白',17,'女','c0001','bai@qq.com');
insert into student values ('000002','小红',19,'fe','c0001',null);
insert into student values ('000003','小王',19,'女','c0001',null);
select * from student
--【外键约束】foreign key
--表中的某些列是其他的表中的主键
--班级编号 是 班级表 的主键
--创建一张班级表
--主表:被引用字段的表,它的主键被其他的表作为外键使用。
--从表:使用其他的表的主键作为外键的表
create table clazz(
cno varchar2(6) primary key,
cname varchar2(20) unique,
cloc varchar2(30) not null
);
--插入测试数据
insert into clazz values('000001','京南508班','北京亦庄开发区');
insert into clazz values('000002','京南503班','北京亦庄开发区');
insert into clazz values('000003','西三旗302班','北京西三旗校区');
select * from clazz
drop table student purge;
create table student(
sno varchar2(6),
sname varchar2(12) not null,--简化的非空约束
sage number(3),
sgender varchar2(3) default '男',
cno varchar2(10) ,-- references clazz (cno),
semail varchar2(20) ,
constraints pk_student primary key (sno),--表级添加约束
constraints uk_student_email unique(semail),--表级的 唯一约束
check (sage between 18 and 30),
constraint ck_student_sgender check (sgender in ('男','女')),
constraint fk_student_cno foreign key (cno) references clazz (cno)--外键的表级约束
-- foreign key (cno) references clazz (cno)--简化的外键约束
);
--插入测试数据
insert into student values ('000001','小白',19,'女','000001','bai@qq.com');
insert into student values ('000002','小白',27,'女','000002','bai1@qq.com');
insert into student values ('000004','小红',19,'女','c0001',null);
insert into student values ('000003','小王',19,'女','000003',null);
select * from student;
---2:约束相关【创建表之后添加约束】
drop table student purge;
create table student(
sno varchar2(6),
sname varchar2(12) not null,--简化的非空约束 只能列级约束
sage number(3),
sgender varchar2(3) default '男',
cno varchar2(10) ,
semail varchar2(20)
--constraints pk_student primary key (sno),--表级添加约束
--constraints uk_student_email unique(semail),--表级的 唯一约束
-- check (sage between 18 and 30),
-- constraint ck_student_sgender check (sgender in ('男','女')),
-- constraint fk_student_cno foreign key (cno) references clazz (cno) on delete cascade--外键的表级约束---设置级联删除
-- constraint fk_student_cno foreign key (cno) references clazz (cno) on delete set null-----设置set null
);
select * from student
--创建表之后添加约束
--如果表中已经有数据违反了添加的约束,那么约束不能添加,必须将数据清除掉才能添加
alter table student add constraints pk_student primary key(sno);
alter table student add constraints uk_student_email unique(semail);
alter table student add constraints ck_student_sgender check (sgender in ('男','女'));
alter table student add constraints ck_student_sage check (sage between 18 and 30);
alter table student add constraints fk_student_cno foreign key(cno) references clazz (cno) on delete set null
--删除约束
alter table student drop constraints ck_student_sgender
insert into student values ('000004','小白',30,'fe','000002','bai12@qq.com');
delete student where sno='000004'
3:级联删除
---主表删除字段 级联删除问题
--删除主表的字段
--如果主表的字段没有被从表使用,那么可以直接删除。
delete from clazz where cno='000003'
---如果主表的字段有被从表使用,那么不可以直接删除。 这只是一种默认的情况。
delete from clazz where cno='000001'
--删除主表的记录,关于从表中的相关的记录的处理的方式 一共有三种。
--1:默认的 RESTRICT:删除受限制。如果从表中使用了某一个主表中的字段的值,那么主表中的值不允许删除。
--2:cascade:级联删除。如果主表中的某个记录被删除,那么从表中对于该记录的引用的记录也一并删除。
--3: set null : 如果主表中的 记录被删除掉,那么从表中对于主表的该记录的引用的相关的 内容 直接设置为 null。
drop table student purge;
create table student(
sno varchar2(6),
sname varchar2(12) not null,--简化的非空约束
sage number(3),
sgender varchar2(3) default '男',
cno varchar2(10) ,
semail varchar2(20) ,
constraints pk_student primary key (sno),--表级添加约束
constraints uk_student_email unique(semail),--表级的 唯一约束
check (sage between 18 and 30),
constraint ck_student_sgender check (sgender in ('男','女')),
-- constraint fk_student_cno foreign key (cno) references clazz (cno) on delete cascade--外键的表级约束---设置级联删除
constraint fk_student_cno foreign key (cno) references clazz (cno) on delete set null-----设置set null
);
insert into student values ('000001','小白',19,'女','000001','bai@qq.com');
insert into student values ('000003','小白',30,'女','000002','bai1@qq.com');
select * from student
--删除主表的一行记录
delete from clazz where cno='000001'
---删除主表
--直接删除主表,如果主表的某些记录被从表所引用,那么是不能删除的。
drop table clazz
--将从表中的数据全部删除
delete student
truncate table student
--即使从表中的数据没有对主表的数据有任何的引用,那么也不能直接删除主表。约束对象对 主表是有引用的。
select * from clazz
--如果想直接删除主表,那么必须和主表相关的约束一并删除。
--从表中相关的字段对主表的引用,不做任何的处理。
drop table clazz cascade constraints
select * from student
SQL语句复习【专题七】的更多相关文章
- SQL语句复习【专题一】
SQL语句复习[专题一] --创建用户 scott 并设置密码为 tiger create user scott identified by tiger --用户刚刚创建没有任何的权限,连登录的权限都 ...
- SQL语句复习【专题二】
SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数 ...
- SQL语句复习【专题三】
SQL语句复习[专题三] DML 数据操作语言[insert into update delete]创建表 简单的方式[使用查询的结果集来创建一张表]create table temp as sele ...
- SQL语句复习【专题四】
SQL语句复习[专题四] 多表查询 sql 92多表查询 sql92.sql99 标准--查询所有员工的姓名,部门编号,部门名称select * from empselect * from dept- ...
- SQL语句复习【专题五】
SQL语句复习[专题五] 单行子查询:只会得到一个结果的子查询[子查询的内容必须放在小括号中.在查询语句中的查询语句 ]--查询所有比 CLARK 员工 工资高的员工--1.先查询 CLARK 员工的 ...
- SQL语句复习【专题六】
SQL语句复习[专题六] 用户 + 创建表 --创建一个新的用户,然后给新的用户创建一张表,然后给表中添加一些数据.查询表中的数据 --创建用户需要比较大的权限 DBA create user di ...
- SQL语句复习【专题八】
SQL语句复习[专题八] 序列 Sequence.数据库对象是 oracle 专有的.作用:可以将某一列的值使用序列,来实现自动增长的功能.访问序列的值.[序列有两个属性 nextval currva ...
- SQL语句复习【专题九】
SQL语句复习[专题九] 视图:View视图的概念:视图是从若干基本表或其他视图构造出来的表.在创建一个视图时,只是存放的视图的定义,也即是动态检索数据的查询语句,而并不存放视图对应的数据在用户使用视 ...
- sql语句复习(基础-提升-技巧-经典数据开发案例-sql server配置)
1 基础 1.说明:创建数据库 CREATE DATABASE database-name charset=utf8 2.说明:删除数据库 drop database dbname 3.说明:备份sq ...
随机推荐
- JAVA与c#中byte取值范围的差异
C#中分有符号类型的sbyte和无符号类型的byte Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.Min ...
- 图解Go协程调度原理,小白都能理解
阅读本文仅需五分钟,golang协程调度原理,小白也能看懂,超实用. 什么是协程 对于进程.线程,都是有内核进行调度,有CPU时间片的概念,进行抢占式调度.协程,又称微线程,纤程.英文名Corouti ...
- redis 3.2.5单机版安装、使用、systemctl管理Redis启动、停止、开机启动
参照地址 http://www.mamicode.com/info-detail-1488639.html 前提:防火墙安装,然后打开端口,设置开机启动 一.redis源码安装 [root@host- ...
- 搭建hadoop2.4.1
前期准备: 1.系统基本形况: ip hostname role server loginName 192.168.1.101 h1 NameNode,ResourceManager centos7_ ...
- linux 自定义函数
用别人的车子出行,总感觉别扭,那怎么自定义自己的车轮子呢? 通过上面的求两个参数的和例子,我们可以学到定义一个函数基本的步骤, function getSum(){ SUM=$[$n1+$n2] ...
- 【VS开发】学习VS2010 ------ 多种类型的视图集合CTabView
多种类型的视图集合CTabView 首先利用AppWizard建立工程,然后将视类的基类更改为CTabView,并将所有的CView更改为CTabView. 依次插入以CSrollView.CList ...
- NProgress颜色的修改以及在Vue中的使用
一.NProgress的作用是在站内进行页面之间的跳转的时候,在浏览器的顶部显示一个进度,使用非常简单,可以在百度一下. 二.如何修改NProgress默认的进度条颜色?如下图,修改为自己想要的颜色即 ...
- mapreducer计算原理
mapreducer计算原理
- [转帖]k8s国内镜像
k8s国内镜像 https://www.jianshu.com/p/b9fecdb5e3a7 wu_sphinx 关注 2019.05.06 20:43* 字数 155 阅读 628评论 0喜欢 0 ...
- quartus ii 粗略使用教程
重复刚刚做过的下载程序,不选sof文件,选择jic文件 选择program config然后点击start,观察开发板,断电在开启后仍然有效果,想要擦除开发板flash文件,可以点击取消program ...