Oracle教程第四篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Phone_1070333541/article/details/84839095

一、序列

1.创建序列。

create sequence req_person (
空空空k start with 4
空空空k increment by 1
空空空k maxvalue 99999999999
空空空k minvalue 4
空空空k nocycle //序列用完,正常报错,不重复 (sycle 重复,违反了主键唯一)
空空空k nocache //oracle 会每次缓存20 ,关闭就连续存储了
)

或者直接简写:
create sequence seq_tb nocycle nocache; 默认起始1 自增1

2.使用序列。

insert into person values (
空空空k seq_person.nextval,
空空空k ... , ...
)

二、小问题。

删除整个表数据,区别及效率。

1. delete from p1
空k 效率低,检查点进程进入事务模式,将其备份。
2. truncate table p1;
空k 快但是危险,直接删除相关的物理结构,然后创建。
空k 同样危险的还有 update 没有加 where 条件筛选。

三、事务

1. 提交。

2. 回滚。

3. 保存事务点。

空k insert into p1 values (...)
空k insert into p1 values (...)
空k savepoint a;
空k insert into p1 values (...)
空k rollback to savepoint a;

4. 隔离级别。

空k 读已提交。

四、视图

1. 简化一些复杂查询。

2. 创建视图前得赋予权限

空k grant create view to test302;

3. 语法。

空k create or replace view findOrderItems as 这里是查询语句

4. 使用视图查询 。

空k select * from findOrderItems

5. 能对视图中的数据增删改吗?

空k 可以,但是不建议。
空k 只建议封装查询结果。

五、索引

1. 什么是索引。

空k 随着数据量的增加,查询速度越来越慢,这个时候就有索引机制,相当于表数据的目录。
空k 主键一旦被设定,就有一个唯一索引。

2. 分类。

空k 单列索引和复合索引。

3. 创建单列索引。

空k create index index_person_name on person(name);
空k 当这一列有唯一时无法创建。

4. 创建复合索引。

空k create index index_person_gd on p1(gender,birthday);

5. 注意。

空k 5.1. 索引创建是在添加数据之前还是之后呢?
空k 空k 创建表,添数据,如果查询慢,添索引。
空k 5.2. 索引添在那些字段?
空k 空k where 条件中 经常出现的列。
空k 5.3. 表的索引是越多越好吗?
空k 空k 索引是服务于查询的,但是一张表一旦有了索引之后,增删改反而更慢
空k 空k 索引如果过多,重建索引的时候就会很慢。
空k 5.4. 什么时候用索引?
空k 空k 一张表,查询特别频繁,数据量大
空k 5.5. 根据列的查询类型不同,分为以下索引。
空k 空k 主键上:
空空Kk 空k 1 2 3 4 5 6 ... 高基数列 B树索引,正向键
空空Kk 空k 7xxx 7xxx 7xxx 反向键
空k 空k 外键上:
空空Kk 空k 位图索引 低基数列

6. 查询索引(表下,用户下)

空k select * from all_indexes where table_name = '表名';
空k select * from user_indexes ;

7. 删除索引

空k drop index 索引名 ;

六、同义词

1. 如何快速创建emp 及 dept

空k 通过system 赋予 test302 emp,dept 表的查询权限。

2. 赋予权限。

空k grant select on scott.dept to test302;
空k grant select on scott.emp to test302;

3. 使用

空k select * from scott.emp ;

4. 能不能像调用普通表一样使用其他用户的表(视图)呢。

空k grant create public synonym semp for emp ; //在scott 用户下设置表别名(同义词)

5. 简化使用(特点)

空k select * from semp;

6. 让表的访问更加安全(特点)。

空k 不让别人知道真实的表名

7. 自己定义的用户 得赋予权限才能设置同义词。

空k -- 赋予某用户创建同义词权限
空k grant create public synonym to test302

8. 要想让scott用户使用自己定义的用户的表

空k 还得从 2.设置一遍。

七、数据的导入导出

1. oracle 数据库的导入导出,分两种:cmd命令,plsql程序。

2. 命令。

空k exp 数据导出
空空空K exp 你的用户名/密码 full = y //导出整个数据库-->expdat.dmp文件。
空空空空空空空空空空Kk file=c:\temp.dmp //导出到指定位置。
空空空空空空空空空空Kk owner=test302 //导出指定用户的数据库。
空空空空空空空空空空Kk tables=xxx,xxx (表名) //导出指定用户下的某些表
空空空 imp 数据导入
空空空空空空空空空空Kk imp 你的用户名/密码 full=y

3. 客户端。

空k tools --> 导出
空k tools --> 导入

七、数据的导入导出

1. 需求1。

空k 输出 hello。
空k BEGIN
空空空 dbms_output.put_line('hello !')
空k END;

2. 需求2。

空k 定义变量,输出hello
空k DECLARE
空空空 //定义你所需要的所有变量
空空空 v_msg varchar2(32) := ' hello '
空k BEGIN
空空空 dbms_output.put_line(v_msg);
空k END;

3. 需求3。

空k 输出scott的工资。
空k DECLARE
空空空 V_SAL EMP.SAL%TYPE;
空k BEGIN
空空空 SELECT SAL INTO V_SAL FROM EMP WHERE ENAME = 'SCOTT';
空空空 dbms_output.put_line(V_SAL);
空k END;

4. 需求4。

空k 展示 编号,姓名,职位,薪资。展示 编号,姓名,职位,薪资。
空k DECLARE
空空空 V_EMP_OBJ EMP%ROWTYPE;
空k BEGIN
空空空 SELECT * INTO V_EMP_OBJ FROM EMP WHERE ENAME ='SCOTT';
空空空 dbms_output.put_line(v_EMP_OBJ.ENAME);
空k END;

5. 需求5。

空k 接收用户的输入并打印。
空k DECLARE
空空空 V_MSG VARCHAR2(32) := &请输入您要打印的话
空k BEGIN
空空空 dbms_output.put_line(V_MSG);
空k END;
空k 只能接受数字。

6. 需求6。

空k 从控制台接收指定输入然后输出。
空k DECLARE
空空空 V_NUM number := &NUM
空k BEGIN
空空空 IF V_NUM=1 THEN
空空空空空 dbms_output.put_line('输入正确!');
空空空 ELSE (ELSIF)
空空空看看 dbms_output.put_line(''输入错误!);
空空空 END IF;
空k END;

7. 需求7。

空k 循环输出1-10
空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空看看 LOOP
空空空看k EXIT WHEN V_INDEX >10
空空空看k dbms_output.put_line(v_INDEX);
空空空空k V_INDEX := V_INDEX+1;
空空空 END LOOP;
空k END;

空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空空空 LOOP
空空空空k WHILE V_INDEX<=10
空空空空k dbms_output.put_line(v_INDEX);
空空空空k V_INDEX := V_INDEX+1;
空空空 END LOOP;
空k END

空k DECLARE
空空空 V_INDEX NUMBER(10) :=1
空k BEGIN
空空空 FOR i IN 1..10 LOOP
空空空看k dbms_output.put_line(i);
空空空 END LOOP;
空k END;

8. 需求8。

空k 创建序列
空空空 CREATE SEQUENCE SEQ_GRADE NOCYCLE NOCACHE;

空k BEGIN
空空空 FOR i IN 1..10 LOOP
空空空空k IF I < 10 THEN
空空空空空空k INSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'计算机02'||i,'JavaEE');
空空空空k ELSE
空空空空空空k INSERT INTO GRADE VALUES (SEQ_GRADE.NEXTVAL,'计算机03'||i,'JavaEE');
空空空空k END IF;
空空空 END LOOP;
空空空 COMMIT;
空k END;

Oracle 教程第三篇传送门

猜你喜欢

转载自blog.csdn.net/Phone_1070333541/article/details/84839095