序列 sequence (除了表外,这个最重要)
概念
用来产生主键的值(自己控制主键值,很容易重复,用sequence可以自动增长产生主键值)
序列可以产生1.0*10^38个数
如何创建和使用序列
- 创建序列:
create sequence 序列名; (和建立表一样)
用序列放入的主键值绝对不会重复
- 使用序列:
序列名。nextval(使用序列值的下一个数)
序列名。currval(使用当前序列数,基本不会用到)
一张表只能用一个序列,不能用两个序列,否则可能重复
可以两张表用一个序列,但是这样数会比较乱
演示:
(1) 创建表(之前要先删表)
create table testseq( id number primary key, name varchar2(30), salary number, );
(2) 创建序列
create sequence testseq_id;
(3) 使用序列,向表中插入数据
insert into testseq values( testseq_id, nextval, 'test'|| testseq_id.currval, 1000*testseq_id.currval, );
如何删除序列
drop sequence 序列名 ;(和删除表一样,不存在就说删不到)
drop sequence testseq_id;
drop sequence testseq_id;
创建序列是可以规定其属性(知道就行)
- create sequence 序列名(表名_要使用序列的字段名)
- minva 1 最小值
- maxvalue 9999999 最大值
- increment by 1 每次增长数
- start with 216 从哪里开始
- nocache 有没有缓存
- noorded 能不能排序
- nocycle ; 能不能循环
索引 index(不重要,了解就行,DBA才用)
作用
加速查询速度
原理
底层通过树状结构组织数据,消耗了大量的空间和时间来加速查询。消耗的是建立索引的时间,一旦索引建立完毕,查询就很快。组织数据的树状结构消耗的空间很大。
索引就像书的目录,正常的查找数据像在书中一页一页查询数据量越大,索引的优势越大
ps:set timing on 如此设置后就会统计每条操作的时间
假设有3亿条数据,要查询其中一条数据:
不用索引:
用oracle(配置为2G内存,i3处理器时)
查询一条数据大概需要60*8=480s
用索引:0.01s
创建语法
对唯一性的字段,系统会自动建立索引,叫唯一性索引
非唯一性索引建立:在表的某个字段上创建索引
正常用法:
create index 索引名 on 表名(要创建索引的字段名);
快速建表(非正常用法)
create table 表名 as select id,first_name name,salary from 查询的表名
(即建的表的数据和查询的数据一样)
演示:
删除语法
drop index 索引名;
总结
数据库脚本(xxx.sql)里是怎样写的?(大小写不敏感)
(1)删序列
drop sequence 序列名;
(2)删表
drop table 表名 cascade constraint /* 解除关联*/ ;
(3)创建序列(设置属性)(一般之前删了几个就创建几个)
create sequence 序列名 属性;
(4)创建表(字段,列级约束,表级约束)
create table 表名(字段以及约束);
(5)增加数据
insert into 表名 values( 匹配表的要求的要增加的数据 );
(6)提交修改
commit ;
***(4)(5)(6)每创建一个表写一次
(7)加外键约束
alter table 子表名 add constraint 子表名_加外键的字段名_fk foreign key(加外键的字段名)reference(父表名_被加外键的字段名);
(8)输出
Prompt table and sequences created and populated.set feedback on