Oracle基础知识点

一、数据完整性

1.含义:存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。

2.分类:数据完整性是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据3.和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

3.方式:数据库采用多种方法来保证数据完整性,包括外键、约束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。

二、Sql语言的分类

DML(数据操纵语言)包括:insert(插入)、update(更新)、delete(删除)、select(查询)

DDL(数据定义语言)包括:create(创建)、alter(修改)、drop(删除)

DCL  (数据控制语言)   包括:grant(授权)、rollback(回滚)、commit(提交)

三、事务

1.定义:事务是指作为单个逻辑工作单元执行的一组相关操作。

2.作用:保证数据的安全有效。

3.特点:ACID

    原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。

    一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。

    隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。

    持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失。

4.事务产生的问题:数据异常

    脏读(Dirty Read):事务T1更新了一行数据,还没有提交所做的修改,T2读取更新后的数据,T1回滚,T2读取的数据无效,这种数据称为脏读数据。

    不可重复读(UNrepeatable Read):事务T1读取一行数据,T2修改了T1刚刚读取的记录,T1再次查询,发现与第一次读取的记录不相同,称为不可重复读。

    幻读(Phantom Read):事务T1读取一条带WHERE条件的语句,返回结果集,T2插入一条新纪录,恰好也是T1的WHERE条件,T1再次查询,结果集中又看到T2的记录,新纪录就叫做幻读。

5.衍生知识:事务的隔离级别

 脏读不可重复读幻读
READ_UNCOMMITTED(读未提交)
READ_COMMITTED(读提交)×
REPEATABLE_READ(可重读)××
SERIALIZABLE(可串行化)×××

四、同义词

就是给数据库对象你个别名

五、视图

1.定义:预定义的查询,作为表一样的查询使用,是一张虚拟表

2.优点:
    对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
    用户通过简单的查询可以从复杂查询中得到结果。
    维护数据的独立性,试图可从多个表检索数据。
    对于相同的数据可产生不同的视图。

3.视图的创建:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
       [(alias[, alias]...)]
AS subquery
       [WITH CHECK OPTION [CONSTRAINT constraint]]
       [WITH READ ONLY]
/*
OR REPLACE:若所创建的试图已经存在,则替换旧视图;
FORCE:不管基表是否存在ORACLE都会自动创建该视图
    (即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用);
NOFORCE:如果基表不存在,无法创建视图,该项是默认选项(只有基表都存在ORACLE才会创建该视图)。
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制
    (比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),
WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。
    现实开发中,基本上不通过视图对表中的数据进行增删改操作。
*/

六、触发器

-- 触发器的语法
create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
begin
 pl/sql语句
end

--其中:
/*
触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
*/

七、序列

定义:oracle中实现增长的对象

用法:

-- 1.创建表
create table sequence_table_test1(  
id number(20) NOT NULL primary key,-- 主键,自动增加
name varchar2(20)); 

-- 2.序列的创建
/*序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。
其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。*/
--例:
create sequence sequence_name
[start with num]             --定义序列的初始值(即产生的第一个值),默认为1。  
[increment by num]           --定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
[maxvalue num|nomaxvalue]    --定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。 
[minvalue num|nominvalue]    --定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。 
[cycle|nocycle]              --序列生成器的值达到限制值后是否循环。
[cache num|nocache]          --定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。 

--例:
Create Sequence sequence_sequence_test1
Increment by 1     -- 每次加几个 
start with 1       -- 从1开始计数     
nomaxvalue         -- 不设置最大值。如果要设置最大值:maxvalue 9999
nocycle            -- 一直累加,不循环    
cache 10; 

-- 3.序列的使用
-- 创建触发器
Create trigger sequence_trigger_test1 before
insert on sequence_table_test1 for each row -- 对每一行都检测是否触发
begin
select sequence_sequence_test1.nextval into:New.id from dual;
end;

-- 4.序列的测试
insert into sequence_table_test1(name) values('lgb'); 

八、索引

对数据库表中的某些列进行排序,便于提高查询效率

 九、存储函数和存储过程

不同点:是否用return语句返回值。存储函数一定要用return返回值。存储过程不可以通过return语句返回函数值。

十、分页

Oracle中使用rownum来进行分页,这个是效率最好的分页方式

select * from
(select rownum r,empno from emp where rownum <=10)
where r>5;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值