Oracle基础

一、Oracle与MySQL的区别

1、Oracle是收费的大型数据库,MySQL是开源免费的中小型数据库
2、主键:
MySQL一般使用自动增长类型,指定表主键auto increment,插入记录时,主键会自动增长。Oracle没有自动增长类型主键一般使用的是序列,插入记录时将序列号的下一个值赋给该字段即可。
3、单引号处理:
MySQL里字符串是可以用双引号,Oracle 字符串使用单引号
4、分页处理
MySQL是直接在sql语句中使用limit可以实现,Oracle 则需用到rownum和嵌套查询。
5、对事物提交
MySQL默认是自动提交,也可以修改为手动提交;Oracle需要手动提交,需要点击commit按钮。

二、Oracle定义

1、ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S(Browser/Server)体系结构的数据库之一。
2、特点:
(1)完整的数据管理功能:

  • 数据的大量性;
  • 数据的保存的持久性;
  • 数据的共享性;
  • 数据的可靠性;
    (2)完备关系的产品:
  • 信息准则—关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
  • 保证访问的准则;
  • 视图更新准则—只要形成视图的表中的数据变化了,相应的视图中的数据同时变化;
  • 数据物理性和逻辑性独立准则;
    (3)分布式处理功能:
    ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sqlNet、SQLCONNECT和其他非ORACLE的关系型产品构成。
    (4)用ORACLE能轻松的实现数据仓库的操作
    3、优点:
  • 可用性强
  • 可扩展性强
  • 数据安全性强
  • 稳定性强

三、Oracle基础

1、增删改查

--*可以查所有列,如果需要查特定某个列,select 字段名 即可
select * from 表名 where 条件
delete from 表名 where 条件

2、order by

--如果要排序的列中有NULL值,查询后的结果会将NULL值放置在前面
select * from 表名 order by 需要排序的列名 (ASC升序/DESC降序)

3、distinct

--DISTINCT子句只能在SELECT语句中使用。
select distinct 列名 from 表名

4、and、or

--and逻辑运算符,如果两为真,则返回true;
--or 如果其中一个为真,则返回true;

5、In

--列名 (not)in (值,值)

6、between

--BETWEEN运算符允许指定要测试的范围。当使用BETWEEN运算符为SELECT语句返回的行形成搜索条件时,只返回其值在指定范围内的行。

7、like

--%(百分号)匹配零个或多个字符的任何字符串。
--_(下划线)匹配任何单个字符。

四、Oracle事务

1、事务
(1)事务在数据库中是工作的逻辑单元,单个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制,可以确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。
(2)事务特性:

  • 原子性(Atomicity):一个事务里面所有包含的SQL语句都是一个整体,是不可分割的,要么不做,要么都做。
  • 一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。
  • 隔离性(Isolation):数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务在并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。
  • 持久性 (Durability) : 当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。

五、字符串函数

1、|| 连接运算符

--返回连接后的一个字符串值
string1 || string2 [ || string_n ]

六、序列

1、序列定义:序列是序列号生成器,可以为表中的行自动生成序列号,产生一祖等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。
2、创建序列:
创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:
  CREATE SEQUENCE 序列名
  [INCREMENT BY n]
  [START WITH n]
  [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]
  [{CYCLE|NOCYCLE}]
  [{CACHE n| NOCACHE}];
(1) INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
(2) START WITH 定义序列的初始值(即产生的第一个值),默认为1。
(3) MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
(4) MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
(5) CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
(6) CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入cache x个。这种情况也能会在数据库关闭时也会导致序号不连续。
(7) NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。
(8) CURRVAL 中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效。

create sequence testseq increment by 1 start with 1;

3、使用序列
序列名.nextval(生成序列中的下一个序列号);
序列名.currval(生成序列的当前值)

select testseq.currval from dual;
select testseq.nextval from dual;

4、修改序列
注意事项:
(1)必须是序列的拥有者或者对序列有alter any sequence权限
(2)只有之后的序列值会被改变
(3)改变序列的初始值只能通过删除序列之后重建序列的方法实现
5、查询序列

SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM USER_SEQUENCES;
select object_name,object_type from user_objects;

6、删除序列

drop sequence testseq;

你可能感兴趣的:(数据库,oracle,数据库,mysql)