
Oracle
adrian_h
想要变得优秀
展开
-
事务隔离级别与脏读、幻读、 不可重复读
我们知道,事务的四大特性是A(原子性)、C(一致性)、I(隔离性)、D(持久性)。事务隔离级别就是为了满足隔离性的机制。在并发场景下,如果没有一定的处理方式,就会出现脏读、幻读、不可重复读三类问题。脏读:事务A在执行过程中,修改了某数据,事务B读取了修改后的数据,然后事务A进行了回滚操作,这个时候事务B读取到的数据就是"脏数据"。不可重复读:事务A读取了两次数据,在这个过程中事务B修改了这部分数据并提交,导致两次读取出来的数据不一样。幻读:和不可重复读有点像,事务A读取两次数据,在这个过程中事务B原创 2020-12-16 15:26:05 · 168 阅读 · 0 评论 -
Oracle调优--全表扫描与高水位线
全表扫描与高水位线决定是否使用全表扫描的要素:访问的数据块个数最终结果集行数舍弃的行数全表扫描通常要读出直到HWM标记的所有的属于该表数据块,即使该表中没有任何数据。HWM(高水位线):用来界定一个段中使用的块和未使用的块。在我们插入数据时,HWM逐渐上移,在HWM之下的,表示使用过的块,HWM之上的就表示未使用过的块。delete操作不会降低HWM,关于insert语句,如果使用了append选项,HWM会直接上移,数据不会插入到表的空闲块中。所以,一张原本有大量数据的表,用delet原创 2020-09-15 16:14:48 · 173 阅读 · 0 评论 -
Oracle基础(八)--触发器
触发器触发器与表关联,每当执行一个特定的增删改操作时,oracle会自动执行触发器中定义的语句。语法:create (or replace) trigger 触发器名称(before/after) (insert/delete/update of 列名) on 表名begin程序块end 触发器名;触发器分为两类:1.语句级触发器在指定sql语句操作之前或之后执行一次,无论这条sql影响了多少行。例:双休日禁止给员工表写入数据create or replace trigger add原创 2020-08-27 08:51:25 · 139 阅读 · 0 评论 -
Oracle基础(八)--存储过程
存储过程存储过程是在大型数据库中,事先经过编译并存储在数据库中的一段SQL语句的集合。如果有update操作,要在存储过程外commit。(存储过程和存储函数的区别:存储过程可以通过输出参数返回多个值,存储函数只能返回一个值)create or replace procedure 存储过程名 (参数 参数的格式:参数名 in/out 参数类型 )as/isbegin 程序体end;例:计算某员工的年薪create or replace procedure countSala原创 2020-08-25 10:33:34 · 153 阅读 · 0 评论 -
Oracle基础(七)--PLSQL
Oracle PLSQL语法:declare 声明(定义变量、常量)beginexception 例外处理end;/变量的定义及使用基本类型变量和常量的定义:例子:declarename varchar2(20); --变量声明age number(3) :=20; --常量beginname :=‘kun’; --变量赋值dbms_output.put_line(name);end;引用类型变量:例子:declarename employee.ename%t原创 2020-08-25 10:28:22 · 286 阅读 · 1 评论 -
Oracle基础(六)--索引
索引是用于加速数据存取的数据对象,数据库中的索引相当于书籍的目录对于书的作用,合理使用索引可以很大程度上提高数据库运行效率。建立索引的原则:常作为查询条件的字段,建议建立索引;数据量大的表建议建索引。1.单列索引create index 索引名 on 表名(字段名)2.复合索引,查询数据使用的时候,是有顺序的...原创 2020-08-24 15:21:26 · 89 阅读 · 0 评论 -
Oracle基础(五)--视图、序列
视图视图就是封装了一句复杂的sql,且sql中不能有重复的列create view 视图名 as sql语句创建或者覆盖视图:create or replace view 视图名 as sql语句修改视图也修改了视图对应表的数据,不过不建议这样修改,创建只读的视图:create view 视图名 as sql语句 with read only;序列序列可以实现自动增长的功能,不过序列没有绑定到某一张表,任何一张表都可以用到这个序列create sequence 序列名;查询序列的下一原创 2020-08-24 15:19:06 · 151 阅读 · 0 评论 -
Oracle基础(四)--分组
七.分组函数统计记录数 count ()不建议使用count(*)因为这样会统计所有列,影响性能。统计员工数:select count(empno) from employee;查询最小值 min()最大值max()平均值avg()总和sum()查询最低的工资:select min(sal) from employee;八.分组统计写分组统计sql的时候,除了分组函数,结果中存在的字段必须是group by条件后的字段,group by后面没有的字段不能查询。例子:查询每个部门下原创 2020-08-24 14:51:05 · 179 阅读 · 0 评论 -
Oracle基础(三)--多表查询
六.多表查询普通现有:dept 部门表(主要字段:deptno部门编号、dname 部门名称、 )employee 员工表 (主要字段:empno员工编号、ename员工姓名、supno上级编号、deptno部门编号、sal 工资、job工作)salgrade 工资等级表(主要字段:grade工资等级、lower下限、upper上限)例如:查出各员工的姓名,编号,部门名称,工资等级以及对应上级的姓名,工资等级(不存在上级的员工会被筛选掉,如果要保留无上级的员工记录,可以用外连接)select e原创 2020-08-21 17:14:26 · 493 阅读 · 0 评论 -
Oracle基础(二)--基本语句及单行函数
四.基本查询语句查询结果去重:select distinct 字段名 from 表名;非空条件:IS NOT NULL查询编号是123,456,789的用户信息:select * from user where userid in (123,456,789);查询不在这个范围内用not in模糊查询有两种或通配符:“%”:匹配任意长度内容“_”:匹配一个长度内容例如,查询所有用户中用户名第二个字母为A的用户select * from user where username like ‘_原创 2020-08-21 17:06:58 · 157 阅读 · 0 评论 -
Oracle基础(一)--基本概念及常用命令
二.基本概念数据库: oracle数据库是数据的物理存储。oracle会创建一个表空间,然后创建一个用户,再由用户去创建表。可以理解为oracle只有一个很大的数据库,由用户来管理。实例:一个实例是由一系列的后台进程和内存结构组成的。用户:用户在实例下创建,不同实例可以有相同名称用户。表空间:表空间是逻辑概念,一个实例下有多个表空间,一个表空间对应着一个或者多个物理存储文件。三.常用命令查看当前连接的用户:show user用户切换:conn 用户名/密码 (as sysdba)查看当前用户原创 2020-08-21 17:01:47 · 132 阅读 · 0 评论