oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式
数字字典表
--查看当前用户下面有哪些张表
select * from user_tables;
select table_name from user_tables;
--查看当前用户下面有哪些视图
select * from user_views;
select view_name from user_views;
--查看当前用户下面有哪些约束
select * from user_constraints;
select constraint_name from user_constraints;
--查看当前用户下面的约束在哪些表上面
select constraint_name, table_name from user_constraints;
--select * from dictionary;
像上面这样的表被称作数据字典表,存在dictionary中。
索引
索引的概念
索引是一个数据库对象,索引就相当于我们字典里那个索引;当为某个字段建立索引,查询这个字段的时候效率就会更高。
需要注意的是,索引的建立只是提供了查询效率,修改却更慢了,因为需要附加修改索引表。
什么时候建索引
查询某个字段,访问量特别大的时候,而且效率比较低的时候,这个时候可以考虑建立索引。但不要轻易建立索引,因为建立所以也会增加而外的维护开销。
创建索引
--给stu表的email字段创建索引
create index stu_email_index on stu(email);
删除索引
--删除stu表的email字段的索引stu_email_index
drop index stu_email_index;
序列
序列的概念
create table stu
(
id number(10) ,
...
constraint stu_id_pk primary key(id),
...
);
在创建stu表的时候,我们制定了id作为主键,主键是唯一的,这就要求每次插入一条记录,都要插入一个新的id,但是在多线程的环境下同时插入大量记录,如何保证每次插入的id是不同的,而且这个id应该是有序递增的?一般数据库都会提供这样的机制:专门产生一个独一无二的数,然后每次自己往上递增一个1或者指定增量。Oracle里,这种机制称为序列sequence。sequence是一个对象,可以使用里面的属性nextval作为主键id的值,这就能保证主键id是唯一的。
创建序列与查看
--序列提供了两个属性,即NEXTVAL 和CURRVAL,用来访问序列中的序号。
--其中NEXTVAL代表下一个可用的序号, CURRYAL代表当前的序号。
drop sequence seq;
create sequence seq;
select seq.nextval ,seq.currval from dual;
SELECT * FROM USER_SEQUENCES;
SELECT * FROM ALL_SEQUENCES;
--sys用户查看
SELECT * FROM DBA_SEQUENCES;
--INCREMENT BY选项指定了序列中序号递增的幅度
drop sequence seq2;
create sequence seq2 increment by 2;
select seq2.nextval ,seq2.currval from dual;
--START WITH选项指定序列中的序号从哪个数字开始
drop sequence seq3;
create sequence seq3 start with 20;
select seq3.nextval ,seq3.currval from dual;
--MAXVALUE用来指定序列中序号的最大值
drop sequence seq4;
create sequence seq4 maxvalue 3;
select seq4.nextval ,seq4.currval from dual;
--MINVALUE用来指定序列中序号的最小值
drop sequence seq5;
create sequence seq5 minvalue 5;
select seq5.nextval ,seq5.currval from dual;
--选项CYCLE使得序列中的序号可以循环使用
drop sequence seq6;
--必须指定nocache 或者cache,否则报ORA-04013: number to CACHE must be less than one cycle
create sequence seq6 minvalue 1 maxvalue 5 cycle nocache;
select seq6.nextval ,seq6.currval from dual;
--如果把序列中的序号放在内存中进行缓冲,那么获得序号的速度将大大加快。
--将序列中接下来的n个序号在内存中进行缓冲,最小值为2
drop sequence seq7;
create sequence seq7 minvalue 1 maxvalue 30 cache 3;
select seq7.nextval ,seq7.currval from dual;
序列的修改
--序列在创建之后,可以对其进行修改。
--比如修改它的最大值、最小值、增幅等,但不能修改初始值。
drop sequence seq8;
create sequence seq8 increment by 2;
select seq8.nextval ,seq8.currval from dual;
alter sequence seq8 increment by 3;
删除序列
drop sequence seq;
序列作为主键使用
insert into stu(id,name,email) values(seq.nextval,'lisi','321@qq.com');
insert into stu(id,name,email) values(seq.nextval,'wangwu','988@qq.com');
insert into stu(id,name,email) values(seq.nextval,'chenliu','567@qq.com');
三范式
范式的由来
数据库设计时的一些规则,而这些规则是由一个姓范的人规定的,所以叫范式。
范式的目标
不存在冗余数据(同样的数据不存第二遍)。
第一范式
第一范式的要求:1.要有主键(设计任何表都要有主键) 2.列不可分
第二范式
第二范式的要求:当一张表里面有多个字段作为主键的时候,非主键的这些字段,不能依赖于部分主键。简单的说:不能存在部分依赖。
第三范式
第三范式的要求:不能存在传递依赖(除了主键之外的其他字段必须直接依赖于主键)。
oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式的更多相关文章
- python基础篇(四)
PYTHON基础篇(四) 内置函数 A:基础数据相关(38) B:作用域相关(2) C:迭代器,生成器相关(3) D:反射相关(4) E:面向对象相关(9) F:其他(12) 匿名函数 A:匿名函数基 ...
- 【目录】mysql 基础篇系列
随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...
- 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器
小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...
- 撸基础篇系列,JAVA的NIO部分
前言:撸基础篇系列,避免每次都要从头开始看,写个自己的知识体系树 NIO 核心就是异步, 比如,复制文件,让操作系统去处理,等通知 BIO核心类 一,BIO NIO基本操作类 Bytebuffer 构 ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式
数字字典表 --查看当前用户下面有哪些张表 select * from user_tables; select table_name from user_tables; --查看当前用户下面有 ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...
- oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器
PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...
随机推荐
- .Net MVC的学习(一)
套种间作,也挺有意思的--近来学习感悟.DRP学习的同一时候,折腾了点曾经不曾学习可是却非常多次耳闻过的东西--Asp.Net中的MVC架构模式. 一.是什么? MVC,即(Model-View-Co ...
- php利用href进行页面传值的正确姿势
首先在a.php中 <?php $a = "world"; echo "<a href='b.php?m=$a'>删除</a>"; ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- LeetCode 190. Reverse Bits (算32次即可)
题目: 190. Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 432 ...
- SQL 中多个 and or 的组合运算
sql关系型运算符优先级高到低为:not >and> or AND.OR运算符的组合使用 在WHERE子句中,通过AND.OR运算符可以同时连接多个条件,当然AND.OR运算符也可以同时使 ...
- hiho152周 - 水题 区间问题
题目链接 给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1, A2 ], [ A3, A4 ], ..., [ A2N-1, A2N ],集合 B 包含 M 个区间[ B1, B2 ...
- activity的23张表
--二进制数据表 SELECT * FROM act_ge_bytearray; --属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录, SELECT * FROM act_g ...
- lua_pcall与lua_call之间的区别
lua_pcall与lua_call之间的区别 定义: void lua_call (lua_State *L, int nargs, int nresults); int lua_pcall (lu ...
- Python3基础笔记---模块
参考博客:Py西游攻关之模块 模块的概念: 我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为 ...
- 为什么maven 创建web工程不自动生成Deployment Descriptor:工程名
上面图切换成下面图: 点击eclipse右上角,如下图红圈,然后在选择javaEE这样就切换成javaEE视图了 如果还是不能解决,相信这个链接对你有所帮助:https://www.cnblogs.c ...