1、 数据库
1.1 历史
数据库技术,是之前 60 年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。
数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、储存、检索和维护。
从数据管理的角度看,数据库技术到目前共经历了以下几个阶段:
-
人工管理阶段
-
文件系统阶段
-
数据库系统阶段
人工管理阶段
计算机诞生的初期( 20 世纪 50 年代后期之前),这个时期的计算机主要用于科学计算。从硬件看,没有磁盘等直接存取的存储设备;从软件看,没有操作系统和管理数据的软件,数据处理方式是批处理。
这个时期数据管理的特点是:
-
数据不保存
该时期的计算机主要应用于科学计算,一般不需要将数据长期保存,只是在计算某一课题 时将数据输入,用完后不保存原始数据,也不保存计算结果。
-
没有对数据进行管理的软件系统
程序员不仅要规定数据的逻辑结构,而且还要在程序中设计物理结构,包括存储结构、存取方法、输入输出方式等。因此程序中存取数据的子程序随着存储的改变而改变,数据与程序不具有一致性。
-
没有文件的概念
数据的组织方式必须由程序员自行设计。
-
一组数据对应于一个程序,数据是面向应用的
即使两个程序用到相同的数据,也必须各自定义、各自组织,数据无法共享、无法相互利用和互相参照,从而导致程序和程序之间有大量重复的数据。
文件系统阶段
计算机不仅用于科学计算,而且还大量用于管理数据的阶段(从 50 年代后期到 60 年代中期)。在硬件方面,外存储器有了磁盘等直接存取的存储设备。在软件方面,操作系统中已经有了专门用于管理数据的软件,称为 文件系统。
这个时期数据管理的特点是:
-
数据需要长期保存在外存上供反复使用
由于计算机大量用于数据处理,经常对文件进行查询、修改、插入和删除等操作,所以数据需要长期保留,以便于反复操作。
-
程序之间有了一定的独立性
操作系统提供了文件管理功能和访问文件的存取方法,程序和数据之间有了数据存取的接口,程序可以通过文件名和数据打交道,不必再寻找数据的物理存放位置,至此,数据有了物理结构和逻辑结构的区别,但此时程序和数据之间的独立性尚还不充分。
-
文件的形式已经多样化
由于已经有了直接存取的存储设备,文件也就不再局限于顺序文件,还有了索引文件、链表文件等,因而,对文件的访问可以是顺序访问,也可以是直接访问。
-
数据的存取基本上以记录为单位
数据库系统阶段:
从 60 年代后期开始。在这一阶段中,数据库中的数据不再是面向某个应用或某个程序,而是面向整个企业(组织)或整个应用的。
这个时期数据管理的特点是:
-
采用复杂的结构化的数据模型
数据库系统不仅要描述数据本身,还要描述数据之间的联系。这种联系是通过存取路径来实现的。
-
较高的数据独立性
数据和程序彼此独立,数据存储结构的变化尽量不影响用户程序的使用。
-
最低的冗余度
数据库系统中的重复数据被减少到最低程度,这样,在有限的存储空间内可以存放更多的数据。
-
数据控制功能
数据库系统具有数据的安全性,以防止数据的丢失和被非法使用;具有数据的完整性,以保护数据的正确、有效和相容;具有数据的并发控制,避免并发程序之间的相互干扰;具有数据的恢复功能,在数据库被破坏或数据不可靠时,系统有能力把数据库恢复到最近某个时刻的正确状态。
针对数据库系统, 数据模型 是它的核心。按照数据模型发展,数据库技术可从以下三个方面反映:
-
第一代数据库系统 层次和网状数据库管理系统
层次和网状数据库的代表产品,是IBM公司在 1969 年研制出的层次模型数据库管理系统。层次数据库是数据库系统的先驱,而网状数据库则是数据库概念、方法、技术的奠基。
-
第二代数据库系统 关系数据库管理系统(RDBMS)
1970 年,IBM公司的研究员E.F.Codd在题为**《大型共享数据库数据的关系模型》**的论文中提出了数据库的关系模型,为关系数据库技术奠定了理论基础。到了 80 年代,几乎所有新开发的数据库系统都是关系型的。真正使得关系数据库技术实用化的关键人物是James Gray。Gray在解决如何保障数据的完整性、安全性、并发性以及数据库的故障恢复能力等重大技术问题方面发挥了关键作用。关系数据库系统的出现,促进了数据库的小型化和普及化,使得在微型机上配置数据库系统成为可能。
-
第三代数据库系统 目前此阶段仍处于发展中
随着互联网的发展和技术的不断进步,单独使用关系型数据库已经不能满足现在的需求,于是慢慢产生了很多新的数据库技术。第三代数据库支持多种数据模型,并和多种技术相结合,例如分布式计算、并行计算、人工机智、大数据计算等,同时也广泛应用在各个领域。
1.2 特点
数据库的主要特点有:
-
实现数据共享
数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
-
减少数据的冗余度
同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。
-
数据的独立性
数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构。
-
数据实现集中控制
文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
-
数据一致性和可维护性,以确保数据的安全性和可靠性
-
安全性控制:以防止数据丢失、错误更新和越权使用;
-
完整性控制:保证数据的正确性、有效性和相容性;
-
并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;
-
故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;
-
故障恢复
由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。
2、 oracle环境
2.1 概述
1977 年 6 月,Larry Ellison(拉里,埃里森)与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司,这就是ORACLE公司的前身。
如今,ORACLE(甲骨文)公司,已经是全球最大的企业级软件公司,它的软件和硬件产品众多,其中oracle数据库更是其核心的软件产品,同时它还收购了SUN公司,从而获取了对java语句的“掌控权”。
作为企业级数据库的主打产品,Oracle数据库在众多关系型数据库之中,表现突出,性能优越。但是oracle数据库的价格昂贵,如果再考虑到搭载oracle的服务器和存储设备的话,那么需要付出的成本也会更高。
oracle的版本很多,除了这些商用的收费版本之后,还有一些免费版本,例如我们现在安装使用的版本。
2.2 服务
Oracle数据库安装成功后,系统中会增加几个和oracle相关的服务:
这里面有俩个服务较为重要:
-
OracleServiceXE服务,如果不启动的话,Oracle无法正常使用,也不能使用sqlplus登录到oracle数据库中。
-
OracleXETNSListener服务,如果不启动的话,就无法使用oracle自带管理系统登录到数据库中,之后也无法在代码中使用JDBC连接到数据库中。
服务界面,可以从控制面板中找到并打开,也可以在运行(windows键+R)中输入命令**(services.msc)**
2.3 界面
Oracle自带管理系统登录地址: http://127.0.0.1:8080/apex/
-
成功安装了oracle
-
相关服务已经启动
-
8080 端口没有被占用
2.3.1、创建用户
可以使用system用户登录,登录密码是安装oracle过程中,自己手动输入的密码:
登录后,可以在该界面来创建自己的账号:
例如:
输入用户名和密码,选中赋予的权限,然后点击创建即可:
CONNECT:
当前用户可以登录、登出
RESOURCE:
当前用户可以操作数据
注意,自己单独使用时,密码不要写的太复杂了,建议和用户名一致,这样方便记忆。
注意,之后尽量使用自己新建的账户登录,不要使用管理员账户,因为权限太大,容易误操作。
2.3.2、 执行sql 语句
登录后,可以界面来执行sql语句:
在编辑框中,用鼠标选中要执行的 sql 语句,然后ctrl+enter 即可执行被选中的 sql语句
2.4 登录
sqlplus
是oracle自带的工具,可以使用其命令登录到oracle数据中,并执行用户编写的sql语句。
查看系统中 sqlplus
命令的所在位置:
注意,如果提示没有sqlplus命令,那么说明环境变量path中,没有配置此路径。
在 sqlplus
中,使用指定账号,登录到oracle数据库中:
例如:
sqlplus 用户名/密码
// 普通用户登录
sqlplus test/密码
// 管理员用户登录
sqlplus system/密码
// 使用DBA 的身份登录,这种情况不需要密码,但是这种情况需要当前操作系统的用户有权限才行
sqlplus "/as sysdba"
登录成功后,可以查看当前登录的账号是谁:
show user
登录成功后,如果要清屏:
//Windows系统中
$CLS
//或者
$cls
//Ubuntu系统中
!clear
登录成功后,也可以直接退出:
exit
2.5 会话
登录成功后,默认的会话是中文的:
可以通过命令修改当前会话的语言环境: 会话修改为英文环境
alter session set nls_language=english;
也可以修改回来: 修改为简体中文环境
alter session set nls_language='simplified chinese';
2.6 用户
创建用户:
使用管理员登录后,还可以使用命令创建一个新的用户,并设置密码以及授权:
//创建用户jy,设置密码jy
create user jy identified by jy;
//把角色connect和resource授权给test1账号
grant connect, resource to jy;
这些角色和其他权限在可以界面中看到:
这里角色代表相关权限的集合:
-
connect
角色,基本的连接 -
resource
角色,程序开发 -
DBA
角色,数据库管理
切换用户:
conn
//或者
conn 用户名/密码
创建成功后,界面中也可以看到:
删除用户
// 删除用户并把权限删除
drop user jy cascade;
2.7 导入
在后的练习和使用中,会涉及到三张表,需要把表和对应的数据导入到oracle中
s_region
,区域表:
字段名 | 是否为空 | 数据类型 | 备注 |
---|---|---|---|
id | N | NUMBER | 主键,区域编号 |
name | N | VARCHER2 | 区域名称 |
s_dept
,部门表:
字段名 | 是否为空 | 数据类型 | 备注 |
---|---|---|---|
id | N | NUMBER | 主键,区域编号 |
name | N | VARCHER2 | 区域名称 |
region_id | Y | NUMBER | 外键,部门所属的区域的id |
s_emp
, 员工表:
字段名 | 是否为空 | 数据类型 | 备注 |
---|---|---|---|
ID | N | NUMBER | 主键,员工编号 |
LAST_NAME | N | VARCHER2 | lastName |
FIRST_NAME | Y | VARCHER2 | firstName |
USERID | Y | VARCHER2 | 内部编号 |
START_DATE | Y | DATE | 入职时间 |
COMMENTS | Y | VARCHER2 | 备注 |
MANAGER_ID | Y | NUMBER | 外键,对应的经理id |
TITLE | Y | VARCHER2 | 职位 |
DEPT_ID | Y | NUMBER | 外键,对应的部门id |
SALARY | Y | NUMBER | 工资 |
COMMISSION_PCT | Y | NUMBER | 提成比例 |
查看当前用户,有哪些表:
show user;
select table_name from user_tables;
需要导入的sql文件: table.sql
alter session set nls_language=english;
CREATE TABLE s_dept(
id NUMBER( 7 ) CONSTRAINT s_dept_id_nn NOT NULL,
name VARCHAR2( 25 ) CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER( 7 ),
CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
);
INSERT INTO s_dept VALUES ( 10 , 'Finance', 1 );
INSERT INTO s_dept VALUES ( 31 , 'Sales', 1 );
INSERT INTO s_dept VALUES ( 32 , 'Sales', 2 );
INSERT INTO s