当前位置:Gxlcms > 数据库问题 > oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式

oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式

时间:2021-07-01 10:21:17 帮助过:3人阅读

--查看当前用户下面有哪些张表

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应该是有序递增的?一般数据库都会提供这样的机制:专门产生一个独一无二的数,然后每次自己往上递增一个1Oracle里,这种机制称为序列sequence。sequence是一个对象,可以使用里面的属性nextval作为主键id的值,这就能保证主键id是唯一的。

创建序列

create sequence seq;

select seq.nextval from dual;

删除序列

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)基础篇系列(四)——数字字典、索引、序列、三范式

标签:

人气教程排行