oracle的初识
Oracle的发展历史
Oracle的组织结构
一,第一结构 表空间 ---------逻辑意义
永久段表进空间() —存储
临时段表空间() ------创建
回滚段表空间() -----修改
1,永久表空间:
一般存储数据的表空间;
系统表空间,普通用户使用的表空间都为永久表空间;
永久表空间的状态有三种:读写,只读,脱机;
只有在永久表空间,才能配置ASSM管理模式;
可以设置记录日志模式。 建立选yes,以便数据库出问题后进行恢复;
以设置为系统默认表空间。这样,创建用户时,没有指定默认表空间。就自动设置为系统默认表空间;
设置默认表空间的命令:ALTER DATABASE DEFAULT TABLESPACE <TABLESPACE_NAME>;
2,临时表空间;
一般用来排序和创建索引时使用;
临时表空间里不存放实际的数据,所以,即使出了问题,也不需要恢复,而且,也不需要备份,因此也不需要记录日志;
临时表空间只能呢使用读写模式,而且只能为手动管理段空间模式;
可以设置为系统默认临时表空间。这样,创建用户时,没有指定默认临时表空间。就自动设置为系统默认临时表空间,命令如下:ALTER DATABASE DEFAULT TEMPORARY TABLESPACE <TABLESPACE_NAME>;
3,回滚表空间:
用来存放修改中数据的原数据;
回滚段表空间是用来保证数据°一致性的;
二,第二结构 段 -----------业务意义
1,数据段
2,索引段
3,回滚段
4,临时段
(详细解释)
1,数据段
一个数据可以供以下方案对象(或方案对象的一部分)容纳数据:
(1),非分区表或非簇表
(2),分区表的一个分区
(3),一个簇表
当用户使用CREATE语句 创建表或簇表时,Oracle 创建相应的数据段。
表或簇表(Mysql的表)的存储参数(storage parameter) 用来决定对应数据段的数据扩展如何被分配。
用户可以使用CREATE 或 ALTER 语句直接设定这些存储与访问效率。
2,索引段
Oracle 数据库中每个非分区索引(nonpartitioned index) 使用一个索引段(index segment) 来容纳其数据。
面对于分区索引(partitioned index),每个分区使用一个索引段来容纳其数据。
用户可以使用 CREATE INDEX 语句为索引或索引的分区创建索引段。
在创建语句中,用户可以设定索引段的数据扩展(extent)的存储参数(storage parameter) 以及此索引段应存储在那个表空间中。
(表的数据段和与其祥光的索引段不一定要村是在同一表空间中。)
索引段的存储参数将会影响数据的存储与访问效率。
3,临时段简介
当oracle 处理一个查询时。经常需要为sql语句的解析与执行的中间结果(intermediate stage) 准备临时空间。
Oracle 会自动的分配被称为 临时段(temporary segment) 的磁盘空间。
例如:Oracle在进行排序操作时就需要使用临时段。
当排序操作可以子内存中执行,或Oracle设法利用索引就能执行时,就不必创建临时段。
需要使用临时段的操作:
(1),CREATE INDEX
(2),SELECT…ORDER BY
(3),SELECT DISTANCE…
(4),SELECT…GROUP BY
(5),SELECT…UNION
(6),SELECT…INTERSECT
(7),SELECT…MINUS
有些不能使用索引的关联操作(unindexed join),或者需要在子查询间建立相互关系(correlated subqueries),也可能需要使用临时段(temporary segment).所以当查询包含DISTANCE,GROUP BY,或 ORDER BY 子句时,Oracle有可能是由两个临时段。
** 以上时规划定义,作用
以下,规划存储**
三,区(extent) -----------扩容
段由区组成,区时磁盘分配的最小单位。
短的增大,是通过增加区的个数来实现的。
每个区的大小是数据块大小的整数倍。
区的 大小可以不相同,使用区的目的是保存特定的数据类型的数据。
四,数据快(datablock)
数据快是数据库中最小的I/O 单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。
块的组成部分是 块头、表目录、行目录、空余空间、行数据
整体:表空间→段→区→块
补:(数据库是一个概念)我们创建的数据库是由一堆系统文件组成,不会映射到某一个文件上,一个数据库可以对应多个系统的文件,一个文件只能对应一个库
图解:
Sql语言
1,数据查询语言(DQL)
data question language
用于检索数据库中的数据库,主要是Select 语句,他在操作数据库的过程中使用最为频繁
2,数据操纵语言(DML)
data mainpulation language
用于改变数据库中的数据,主要包括 INSERT update 和 delete 3条语句。其中,insert语句用于将数据插入到数据库中, update语句用于更新数据库已经存在的数据,delete用于删除数据库中已经存在的数据。
3,事务控制语言(TCL)
Transaction Control Language
用于维护数据的一致性,包括 commit rollback 和savepoint 3条语句,其中, commit:提交数据库的更改; rollback:取消对数据库的更改;savepoint:设置保存点;
4,数据定义语言(DDL)
Data Definition Language
用于建立、修改和删除数据库对象。例:用create table 语句创建表, alter table 修改表结构, droptable 删除表;
5,数据控制语言(DCL)
Data Control Language
用于执行权限授予和权限回收的操作, 主要包括 crant 和 revoke; crant :给用户或角色授予权限; revoke: 收回用户或角色所具有的权限
(图解:)
账号
1,用户
用户是真正可以操作数据库的对象,
(1)创建
(2),修改
(3),删除
(1)创建:
Create User USERNAME 账户
Identified by PASSWORD 密码
Defalt Tablespace TABLESPACE_NAME 表空间
Temporay Tablespace TABLESPACE_NAME 临时表空间
Quota integer/unlimited on tablespace; 表空间使用量
account lock or account unlock 用户是否被加锁
(2)修改:
Alter user USERNAME identified by PASSWORD; 修改口令字
Alter user USERNAME password expire; 注销用户口令字
Alter user USERNAME account lock/unlock; 锁定用户
(3)删除:
drop user 用户名; ·删除用户
drop user 用户名 cascade 删除用户及全部的实体
2, 角色。
角色是一组权限的集合,将角色献给一个用户就拥有了这个角色的所有权限。
(1)系统角色
(2)创建自定义角色
(3)修改自定义角色
(4)删除自定义角色
(5)角色赋予
(1)系统角色
DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构
resource:拥有resource权限的用户只可以创建实体,不可以创建数据库结构
connect: 拥有connect 权限的用户可以登录Oracle。不可以创建实体,不可以创建数据结构
对于普通用户:授予 connect resource 权限
对于DBA管理用户: 授予 connect resource dba 权限
(2)创建自定义角色
create role role1; 创建默认角色
create role role1 identified by password1; 创建带密码角色(每次使用临时打开,不常用)
(3)修改自定义角色
alter role role1 not identified; 取消角色口令
alter role role1 identified by password1; 设定口令
(4)删除自定义角色
drop role rolename; 角色删除后,原来拥有该角色的用户就不再拥有该角色了。相应的权限也就没有了,
(5)角色赋予
grant role1 to user1
(5)角色生效
(注:角色的生效是一个什么概念? 假设用户a有b1,b2,b3三个角色,那么如果b1生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限作用于用户,最大可生效角色由参数 max_enabled_roles设定;在用户登录后,Oracle)
将所有直接赋给用户的权限和用户默认角色中的权限赋给用户;)
set role role1; 使role生效
set role role,role2; 使role,role2生效;
set role role identified by password1; 使用带有口令的role 生效(其他角色暂时失效)
set role all; 使用该用户的所有角色生效
set role none; 设置所有角色失效
set role all exoept role1; 除role1 外的该用户的所有其他角色生效。
再给用户(角色) 授权或从用户(角色)回收权限的同时,权限开始生效。
角色则不同,只有用户下次登陆或者执行了 set role 语句才能使角色生效,
select * from select_roles; 查看当前用户的生效角色;
无法使用 with crant option 为角色授予对象权限。
可以使用 withadmin option 为 角色授予系统权限,取消时不是级联
3,权限
(1),系统权限
(2),实体权限
赋予: grant 权限1,权限2 on [username] tablename to usename | role | public [with grant option] 权限传递[with hierarchy option] 子对象权限
回收: revoke 权限1,权限2 on [username] tablename from usename | role | public cascade | cascade constraints
(1),系统权限
系统规定用户使用数据库的权限。(系统权限是对用户而言)
create session 创建会话
create sequence 创建序列
create synonyn 创建同名对象
create table 在用户模式中创建表
create any table 在任何模式中创建表
drop table 在用户模式中删除表
drop any table 在任何模式中删除表
create procedure 创建存储过程
exercute any procedure 执行任何模式的存储过程
create user 创建用户
drop user 删除用户
create view 创建视图
(2),实体权限(对象权限):
某种权限用户对其他用户的表或视图的存取权限。(是针对表或视图而言的)。
对象权限: 表 视图 序列 过程
修改(alter)
删除(delete)
执行(execute)
索引(index)
插入(insert)
关联(reference)
选择(select)
更新(update)
数据类型
1,字符
(1),char 数据类型
(2),varchar2 数据类型
(1)char 数据类型 用于存储固定长度的字符串。一旦定义了char类型的列,该列就会一直保持的声明时所规定的长度大小。当为该列的某个单元格。(行与列的交叉处时单元格)赋予长度较短的数值后,空余部分Oracle会用空格自动填充;如果字段保存的字符长度大于规定的长度,则Oracle 会产生错误信息。char类型的长度范围为1-2000字节。
(2)varchar2 数据类型与 char 类型相似,都用于存储字符串数据。但varchar2类型的字段用于存储边长,而非固定长度的字符串。将字段定义为varchar2数据类型时。该字段的长度将根据实际字符数据的长度自动调整(即如果该列的字符串长度小于定义时的长度,系统不会使用空格填充,而是保留实际的字符串长度)因此大多数情况下,提倡varchar2类型 替代 char/
a,varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
b,varchar2 把空串等同于null处理,而varchar仍按照空串处理;
c,varchar2 字符要用几个字节存储,要看数据库使用的字符集,
!!!大部分情况下建议使用varchar2。可以保证更好的兼容性。
2,数值
number( 星号*,星号)
数值数据类型的字段用于存储带符号的整数或浮点数。Oracle中的number 数据类型具有精度(precisions)和范围(scale)。精度(precision) 指定所有数字位的个数,范围(scale)指定小数的位数,这两个参数都是可选的。如果插入字段的数据超过指定的个数,Oracle将自动进行四舍五入。
3,日期
Date
Oracle 提供的日期时间数据类型时它可以存储日期和时间的组合数据。用Date数据类型存储日期时间比使用字符数据类型进行存储更简单,并且可以借助于Oracle 提供的日期时间函数方便地处理数据。在Oracle中,可以使用不同的方法建立日期值。其中,最常用的获取日期值的方法是通过sysdate 函数,调用该函数可以获取当前系统的日期值。
实操作 表
创建
create table table_name(
c_name1 c_type1,
c_name2 c_type2,
c_name3 c_type3,
c_name4 c_type4
)
修改
rename old_tablename to new_tablename
删除
drop table table_name
补: 发布数据会触发回滚段
实操作 字段
创建
Alter table TABLE_NAME add COLUMN_NAME COLUMN_TYPE
修改
Alter table TABLE_NAME modify COLUMN_NAME COLUMN_TYPE
Alter table TABLE_NAME rename column OLD_COLUMNNAME to NEW_COLUMNNAME
删除
Alter table TABLE_NAME drop column COLUMN_NAME 默认值
默认值
Create table TABLE_NAME(
C_NEME1 C_TYPE1 default default_value,
C_NEME2 C_TYPE2,
C_NEME3 C_TYPE3,
C_NEME4 C_TYPE4
)
alert table table_name modify 字段名 defalt ’ ’ ;
以上,笔试多用