--先来一波介绍:
oracle是一款关系型数据库,具有以下特点:
1.支持多用户,大事务量的事务处理
2.在保持数据安全和数据完整性方面性能优越
3.支持分布式数据处理
4.具有可移植性
数据库实例:每个启动的数据库都对应一个数据库实例,由这个实例来访问数据库中的数据。如果把数据库理解为硬盘上的文件,则数据库实例就是通过内存分享运行状态的一组服务器的后台进程。
表空间:每个oracle数据库由若干个表空间组成,用户在数据库中建立的所有内容都被存储在表空间内.一个表空间由多个数据文件组成,但一个数据文件只属于一个表空间.属于数据库的逻辑结构.
安装:自行百度(我用的时11g)
window下启动数据库(开启服务):1.OracleServiceSID时Oracle数据库服务,默认自启,否则客户端连接数据库会报错。
2.OracleOraDb11g_home1TNSListenter,监听服务,监听来自客户端连接的请求(本地连接可不启,使用自带的sqlplus连接。但若是第三方客户端连接,必须开启)
3.OracleDBConsoleSID:数据库控制台服务
服务器端和客户端的配置可通过相应的配置文件查看: LISTENER.ora TNSNAME.ora
--oracle常用的数据类型:
1.字符串数据类型
char:固定长度的字符串,默认占用1字节
varchar2:可变长度的字符串
nchar :用来存储Unicode字符集类型,双字节
nvarchar2 :存储国际化可变长度的字符串
2.数值数据类型:
number:可以存储证书,负数,零,定点数,精度为38位的浮点数
格式:number(p,s)
p:有效位数,冲左边第一个不为0的数算起,小数点和位数不计入位数。
s:小数点右边数字的位数
使用规则:先精确到小数点s位,若有效位数《=p,则正确。
3.日期时间数据类型
date:日期和时间的数据
timestamp:用于存储日期的年月日和时间的时分秒
(若数据库内的日期和我们查询出来的不一样,可能系统环境变量没有设置)
4.lob数据类型
clob:存储大量字符数据,大量文字内容的文档
blob:二进制对象,音频视频等
nclob:存储大的nchar字符数据,不大于4gb
--伪列,只提供显示操作,不能插入,更新,删除它们的值。
rowid : 不管数据是否重复,每条数据对应的rowid全局唯一
rownum : 主要用于分页,返回一个数值代表行的次序
例如:查询emp表第五条至第10条的记录
--先内层查询使用中止行筛选出结果集,然后在外层查询从结果集找出符合的
select rn,em.empno,em.ename from ( select rownum rn,emp.* from emp where rownum<=10) em where rn>=5;
--sql语言介绍
1.数据定义语言(DDL) : create alter truncate drop
2.数据操纵语言(DML) : insert select update delete
--distinct子句筛选结果集中内容全部相同的行,仅保留一行。
列别名:若别名中包含特殊字符(如空格),则使用双引号括起来.
使用现有表创建新表:
--表和数据的完全复制
create table newStuInfo
as
select * from stuInfo;
--仅要表的结构
....where 1<>2;
3.事务控制语言(TCL) : commit savepoint rollback
--合适开启事务
在oracle中,事务在上一次事务结束后,在下一次修改时自动开启
--合适结束事务
1)数据被提交
发出commit / 执行DDL或DCL语句,事务自动提交 / 与oracle分离,如退出第三方客户端
2)数据被撤销
发出rollback指令 / 服务器进程异常结束 / dba停止会话
4.事务控制语言(DCL) grant revoke
--sql操作符
-集合操作符: 将两个查询的结果组合成一个结果集
union : 两个查询选定的所有不重复的行
union all : 就算重复我们也要,all
intersect : 返回两个查询都有的行,即两表相同的数据
minus : 只返回第一个查询选定,二未被第二个查询选定
-连接操作符(||): 用于将两个或多个字符串合并成一个字符串,或将一个字符串与一个数值合并在一起
--sql函数
to_char():转换位字符串类型
to_date():转换位日期类型
to_number():转换为数值类型
oracle数据库应用:
--表空间:数据库逻辑结构的一个重要组件。表空间可以存放各种应用对象,如表,索引。每个表空间由一个或多个数据文件组成.
使用表空间的目的:对不同的用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作,对模式对象的管理。
可以将不同的数据文件创建到不同的磁盘,有利于管理磁盘空间,有利于提高io性能。
语法: 创建表空间:
create tablespace tablespacename
datafile 'filename' size [k/m] autoextend [off/on]
--off:不扩容 on:空间用完自动扩容
表空间扩容: 1.alter database datafile 'filename' resize [k/m];
2.添加数据文件: alter tablespace tablespacename add datafile 'filename'
size [k/m] autoextend [off/on];
删除表空间: delete tablespace tablespacename including contents;
表空间只读: alter tablespace tablespacename readonly;
--用户自定义管理:
语法: 创建用户:create user user
identified by password
default tablespace tablespacename
temporary tablespace tablespacename;
--数据库权限管理:
系统权限是指授权用户是否可以连接到数据库上及在数据库上可以进行哪些操作。
对象权限是指用户对数据库中的对象所拥有的权限.
用户可通过 被管理员授权 或 获取被管理元授权的角色
oracle中系统预定义角色 : connect:需要连接到数据库上的角色
resource : 创建表,触发器等
dba : 最高权限
授权: grant 权限/角色 to 用户;
revoke 权限/角色 from 用户;
--序列
序列(sequence) : 用来生成唯一,连续的证书的数据库对象,通常用来生成主键或唯一的值。
创建序列语法: create sequence sequence_name
start with integer //要生成的第一个序列号
increment by integer //增量
maxvalue integer // 最大
minvalue integer //最小
cycle // 到达最大值或最小值后,将继续开始从头开始生成值 nocycle //默认的选项,当到达最大值或最小值后,将不在继续生成值
cache integer //预先分配一组序列号,保存在内存中. nocache //若忽略这俩,默认缓存20个序列号
nextval : 第一次获取序列的初始值,再次引用,增加序列值,返回新值
currval : 序列当前值
更改序列: 使用alter sequence
删除序列: drop sequence sequence_name
--同义词 : 现有对象的别名
当前用户创建私有同义词需要权限:create synnoym 其它用户模式:create synnoym
创建私有同义词: create synonym synonym_name for object_name;
创建公有同义词需要权限 : create public synnoym
create public synnoym synnoym_name for object_name;
删除同义词: drop (public ) synnoym synnoym_name;
--索引 : 加快对表执行sql的速度.
b树索引:建在重复值少的列,有助于按关键字的升序和降序扫描索引。
create index index_name on table_name (column_list);
反向键索引: 对于连续增长的索引列,反向索引可以将索引数据分散在多个索引块,减少i/o瓶颈的发生。
create index index_name_reverse on table(column) reverse;
位图索引: 最适合数据仓库和决策支持系统
优点: 大批及时查询,减少响应时间
占用空间明显减少
配置要求不高
create bitmap index index_bit_name on table(column);
删除索引:drop index index_name
何时删除:不需要,损坏,批量加载前,加载后重建
重建索引: alter index...rebuild
何时重建:用户表一道新的表空间,应将索引一道指定的表空间
包含许多已经删除的项,
--分区表: 一个表分为几个部分,存储在不同的位置。
范围分区:以列的值的范围作为分区的划分条件,将不同的数据放入不同的分区
create table 分区表名 partition by range (column_name)(
partition 分区名 values less than (分区条件),
...
) as select * from 原表明;
间隔分区:范围分区的自动化,随着数据的增加自动划分更多的分区.
create table 分区表明(
列..
)
partition by range (列)
interval (NUMTOYMINTERVAL(n,'interval_unit')) //按照括号内定义的间隔分区 (3,'month'):每三个月一分
(partition 分区名 values less than (分区条件);//不在该区,新建分区
或者(另一种方式)创建间隔分区的结构和创建范围分区的结构差不多
修改分区表:alter table 分区表 add partition 分区表 values less than (column);
查看几个分区,分区名称: select * from user_tab_partitions;
搞完,虽然只是些语法,但都是我自己敲的,不喜别喷。
呃呃呃,貌似也没人看,就当自言自语了。哈哈