-- 序列 sequence :不适合比较大的数据
-- 创建序列
create sequence user_id_seq -- 序列名
start with 1 -- 起始值
increment by 1 -- 步长,也就是每次递增的大小
maxvalue 99999; -- 最大值
-- 查看用户所有序列
select * from all_sequences where sequence_owner = 'XIYE';
-- 或者 select * from user_sequences;
create table tb_user (
id number(5) not null,
name varchar(30)
);
-- 刚创建序列时,无法使用currval,需要先用nextval
-- 导致原因:因为是首次查询序列的当前值,内存中之前并没有缓存序列的任何值,
-- 所以需要先查询一下序列的下一个值(此时,Oracle会自动缓存已查询的序列值),再查询序列的当前值。
insert into tb_user values(user_id_seq.nextval, 'root');
insert into tb_user values(user_id_seq.nextval, 'system');
insert into tb_user values(user_id_seq.nextval, 'other');
-- currval不做插入使用,最好是只供查看
select user_id_seq.currval from dual;
explain plan for
select * from tb_user;
drop table tb_user;
-- 删除序列
drop sequence user_id_seq;
-- 约束
-- 非空约束 not null
-- 设置非空约束
alter table tb1 modify (id char(18) not null);
-- 将其置null就是取消非空约束
alter table tb1 modify (id char(18) null);
-- 唯一约束 unique
-- 添加唯一约束
alter table tb1 add constraint tb_id_uk unique(id);
-- 删除唯一约束
alter table tb1 drop constraint tb_id_uk;
-- 主键约束 primary key(集合了非空和唯一约束)
-- 创建主键约束
alter table tb1 add constraint tb_id_pk primary key(id);
-- 删除主键约束
alter table tb1 drop constraint tb_id_pk;
-- 删除主键(每个表只有一个主键,可以是单主键,也可以是复合主键)
alter table tb1 drop primary key;
-- 外键约束 foreign key(关联其他表的主键):保护数据一致性,主表被其他表参考时,主表不能随便删除数据
create table dept as select *I from scott.dept;
create table emp as select *I from scott.emp;
-- 表需要存在主键
alter table dept add constraint dept_deptno_pk primary key(deptno);
alter table emp add constraint emp_empno_pk primary key(empno);
-- 创建外键约束
alter table emp add constraint emp_deptno_fk foreign key(deptno) references dept(deptno) on delete set null;
select * from emp where deptno = 20;
delete from dept where deptno = 20;
select * from emp where deptno = 20;
-- 删除外键约束
alter table emp drop constraint emp_deptno_fk;
-- 检查约束 check:Check约束的列新增或 修改数据时,数据必须符合Check约束中定义的条件
-- 添加check约束
alter table tb1 add constraint tb_age_ch check(age > 0 and age < 150);
-- 错误:违反检查约束条件 (XIYE.TB_AGE_CH)
insert into tb1 values('201912181725003001', 'jack', 200);
--删除check约束
alter table tb1 drop constraint tb_age_ch;
-- 视图:被称为虚表,是一个虚拟的表,并不是真实存在的。视图的本质是对应一条select语句
-- 创建视图
-- grant create view to xiye; -- 当前用户有dba权限,授权与否无影响
create or replace view v1
as
select id, name, age
from tb1;
-- 插入成功
insert into v1 values('201912181725003001', 'jack', 54);
select * from v1;
create or replace view v2
as
select id, name, age
from tb1
with read only;
-- 插入会失败
insert into v2 values('201912181725003001', 'jack', 54);
select * from v2;
-- revoke create view from xiye; -- 回收权限
-- WITH CHECK OPTION 短语表示,通过视图所做的修改,必须在视图的可见权限范围内:
create table emp as select * from scott.emp;
create or replace view v3
as
select empno, ename, deptno, hiredate
from emp
where deptno = 20
with check option;
-- 错误:视图 WITH CHECK OPTION where 子句违规
insert into v3 values(20102, 'jack', 30, sysdate);
select * from v3;
-- 删除视图
drop view v1;
drop view v2;
drop view v3;
-- 索引:是一种允许直接访问数据表中某一数据行的树型结构。索引记录中存有索引关键 字和指向表中数据的指针(地址)
-- 创建索引
create index i1 on tb1(id);
-- 没有添加索引,插入数据较有索引快(实际影响不大)
-- 重建索引(不知道干啥用??)
alter index i1 rebuild;
-- 删除索引
drop index i1;
数据库笔记05
最新推荐文章于 2025-11-23 21:47:20 发布
本文详细介绍了Oracle数据库中序列(sequence)的创建与使用方法,包括非空约束(not null)、唯一约束(unique)、主键约束(primary key)、外键约束(foreign key)、检查约束(check)等约束的应用,以及视图(view)的创建与操作,索引(index)的创建与维护等内容,旨在帮助读者深入理解并掌握Oracle数据库的管理与优化技巧。
1440

被折叠的 条评论
为什么被折叠?



