Oracle总结
数据库
历史
- 人工管理阶段
- 文件系统阶段
- 数据库系统阶段
人工管理阶段
- 数据不保存
- 没有对数据进行管理的软件系统
- 没有文件的概念
- 一组数据对应于一个应用,数据是面向应用的
文件系统阶段
- 数据需要长期保存在外存上供反复使用
- 程序之间有了一定的独立性
- 文件的形式已经多样化
- 数据的存取基本上以记录为单位
数据库系统阶段
- 采用复杂的结构化的数据模型
- 较高的数据独立性
- 最低的冗余度
- 数据控制功能
针对数据库系统,数据模型是它的核心。按照数据库模型的发展,数据库模型可以从三个方面反应:
- 第一代数据库系统 层次和网状数据库管理系统
- 第二代数据库系统关系数据库管理系统(RDBMS)
- 第三代数据库系统目前此阶段仍处于发展中
特点
数据库的主要特点有:
- 实现数据共享
- 减少数据的冗余度
- 数据的独立性
- 数据实现集中控制
- 数据一致性和可维护性,以确保数据的安全性和可靠性
- 安全性控制:以防止数据丢失、错误更新和越权使用;
- 完整性控制:保证数据的正确性、有效性和相容性;
- 并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;
- 故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;
- 故障恢复
Oracle环境
概述
1977年6月,Larry Ellison(拉里,埃里森)与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发
实验室(Software Development Laboratories,SDL)的计算机公司,这就是ORACLE公司的前身。
如今,ORACLE(甲骨文)公司,已经是全球最大的企业级软件公司,它的软件和硬件产品众多,其中
oracle数据库更是其核心的软件产品,同时它还收购了SUN公司,从而获取了对java语句的“掌控权”。
作为企业级数据库的主打产品,Oracle数据库在众多关系型数据库之中,表现突出,性能优越。但是
oracle数据库的价格昂贵,如果再考虑到搭载oracle的服务器和存储设备的话,那么需要付出的成本也会
更高。
oracle的版本很多,除了这些商用的收费版本之后,还有一些免费版本,例如我们现在安装使用的版
本。
服务
较重要
- OracleServiceXE服务,如果不启动的话,Oracle无法正常使用,也不能使用sqlplus登录到oracle数据库中
- OracleXETNSListener服务,如果不启动的话,就无法使用oracle自带管理系统登录到数据库中,之后也无法在代码中使用JDBC连接到数据库中
- 可以使用 system 用户登录,登录密码是安装oracle过程中,自己手动输入的密码
在 sqlplus 中,使用指定账号,登录到oracle数据库中
//普通用户登录
sqlplus 用户名/密码
//管理员用户登录
sqlplus system/密码
//使用DBA的身份登录,这种情况不需要密码,但是这种情况需要当操作系统的用户有权限才行
sqlplus "/as sysdba"
登录成功后,可以查看当前登录的账号是谁:
show user
登录成功后,如果要清屏:
//Windows系统中
$CLS
//或者
$cls
//Ubuntu系统中
!clear
登录成功后,也可以直接退出:
exit
会话
登录成功后,默认的会话是中文的:
可以通过命令修改当前会话的语言环境: 会话修改为英文环境
alter session set nls_language=english;
也可以修改回来:修改为简体中文环境
alter session set nls_language='simplified chinese';
用户
创建用户:
使用管理员登录后,还可以使用命令创建一个新的用户,并设置密码以及授权
//创建用户test1,设置密码test1
create user test1 identified by test1;
//把角色connect和resource授权给test1账号
grant connect,resource to test1;
这里角色代表相关权限的集合:
- connect 角色,基本的连接
- resource 角色,程序开发
- DBA 角色,数据库管理
切换用户:
conn
//或者
conn 用户名/密码
删除用户
drop user test1 cascade;
查看当前用户,有哪些表:
show user;
select table_name from user_tables;
导入sql文件命令:@文件名.sql
查看表结构
desc 表名
SQL
SQL(Structured Query Language),结构化查询语言,是专门操作关系型数据库的一种语言
SQL语言属于第四代编程语言:
-
第一代编程语言,机器语言,是面向机器的,通过二进制代码对其计算机操作
-
第二代编程语言, 汇编语言,使用指令对应的符号,来代替二进制代码
-
第三代编程语言,高级开发语言 ,例如C、C++ Java等,语言更加简单,操作更方便
-
第四代编程语言,只告诉计算机需要做什么,不需要告诉计算机怎么做,更加接近自然语言
sql语句的分类
- DQL (Data Query Language),数据查询语言
用于检索数据库中的数据,主要是 SELECT 语句 - DML (Data Manipulation Language),数据操纵语言
用于改变数据库中的数据,主要是 INSERT , UPDATE , DELETE 语句 - DDL(Data Define Langage),数据定义语言
用来建立、修改、删除数据库对象,主要是 CREATE 、 ALTER 、 DROP 、 TRUNCATE 语句 - TCL (Transaction Control Language),事务控制语言
用于维护数据的一致性,主要是 COMMIT , ROLLBACK , SAVEPOINT 语句 - DCL(Data Control Language),数据控制功能
用于执行权限授予和权限收回操作,主要是 GRANT , REVOKE 语句
注意,DML语句需要事务的支持(产生事务),DDL语句会自动提交事务
sql、sqlplus、pl/sql的区别:
- sql,结构化的查询语句,操作关系型数据库的语言
- sqlplus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来
- pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如 if for 等
基础
select语句,可以通过列名,把一行行的数据给查询出来,语法为:
select [distinct] *{col_name1,col_name2,..} from tb_name;
注意1,语法中出现的中括号[],表示该部分可有可无
注意2,*号表示所有列
注意3,col_name1,col_name2代表列名,如果有多个可以逗号分开
别名
语法:
select old_column [as] new_column_name from tb_name;
拼接
语法:
select col_name||'spe_char'||col_name from tb_name;
nvl
使用nvl函数可以将null进行替换
语法:
select nvl(col_name,change_value) from tb_name;
distinct
该关键字可以将重复数据去除。
语法:
select distinct col_name,col_name...
from tb_name;
注意,distinct关键词只能放在select关键词后面
format
使用 format 可以将查询结果显示的宽度进行调整。
语法:
//表示last_name列的下方有15个“-”
column last_name format a15
//或者简写为
col last_name for a15;
注意,format只能设置字符类型的字段列
sqlplus
使用 sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改上一条运行的sql语句 。
- buff中只能存储一条sql语句,但是这条sql语句可能有很多行
- 每次放入新的sql语句,会把之前的覆盖掉
- 每次执行sql语句,都会把这个sql语句放到buff里面
sqlplus 相关的命令: - l 查看缓存中的sql语句
- a 在[定位]的那一行后面追加新的内容
- i 在[定位]的那一行下面插入新的一行
- c 替换[定位]的那一行中的某些字符串 ,格式为:c/老的字符串/新的字符串
- del 删除[定位]的那一行内容
- n 后面加内容可以重写这一行
- $ 后面跟一个终端命令,例如$cls清屏,linux中使用!
- / 执行缓存sql命令
如果要清空buff中的sql:
clear buffer
其他的一些命令:
save test.sql //buff中的sql语句保存在test.sql文件中
get test.sql //把test.sql中的内容在加载到buff中,但是没有运行
start test.sql //把test.sql中的内容在加载到buff中并且执行
@test.sql //把test.sql中的内容在加载到buff中并且执行
edit file_name //使用系统默认编辑器去编辑文件
spool 命令:可以记录操作的过程
spool file_name //将接下来的sql语句以及sql的运行结果保存到文件中
sql1
result1
sql2
result2
...
spool off //关闭spool功能