数据库笔记05

本文详细介绍了Oracle数据库中序列(sequence)的创建与使用方法,包括非空约束(not null)、唯一约束(unique)、主键约束(primary key)、外键约束(foreign key)、检查约束(check)等约束的应用,以及视图(view)的创建与操作,索引(index)的创建与维护等内容,旨在帮助读者深入理解并掌握Oracle数据库的管理与优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 序列 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值