二、关系数据库(database manager system) 5
第一章 数据库
一、认识数据库
互联化+时代的到来,需要持久化数据呈现井喷式发展,常规io操作虽然可以满足持久化的需求,但是,对于持久化的目的,对数据的操纵,显然力不从心,且操作的复杂度很大,不利于大规模的发展,审时度势,数据库应运而生。
数据库是数据管理的重要技术,也是计算机的重要分支。由于数据库具有数据化结构,最低冗余度、较高的程序与数据独立性,易于扩展、易于编制应用程序等有点,较大的信息系统都是建立在数据库设计之上的。从一般管理扩大到计算机辅助技术、人工智能以及科技计算等领域。
随着数据库技术的发展,计算机技术也随着得到了很大的发展,数据库为我们提供了可以快速存储以及检索的便利,它也为近几年软件可以如此普及贡献不小的力量。
理解什么是数据库:当我们在写String s = “Hello world”时,程序运行时,数据存储在内存中,程序结束时,数据变消失不再存在。如果我们想下一次运行时,还能读取到这个数据,那么就会想办法将这个数据存储在磁盘文件上,用到我们之前学习的知识,我们学过IO,我们可以用序列化将数据存到本地磁盘文件上,取出时用反序列化,但是这只能存储小数据,所以这时候出现了——数据库。
本次教学中使用数据库:数据库软件:Oracle 11g XE 版本(大学通用版)。Oracle 11g EX与Oracle 11g的区别:本质上没有区别,区别是数据库的创建,XE默认给了一个数据库,企业版会由公司自行创建数据库,而XE不能创建。XE便于安装,而Oracle 11g一次没有安装成功就需要重装系统。
1.1概念
广义:存储数据的系统。
狭义:利用磁盘文件进行有规律的存储数据。(数据不一定全部存储在磁盘文件中,还能存到内存数据库redis(所谓的缓存,也就是存到内存中去))
持久化:将内存中数据,永久的保存到磁盘中,这个过程称为持久化过程。
1.2安装
确保安装时账户是管理员(不是必须的)。
解压数据库,打开DISKI文件夹,setup.exe双击运行,管理员口令123。(尽量不要安装在C盘)
测试数据库是否安装成功:打开dos窗口,执行以下代码:
1.打开doe窗口 输入:sqlplus /nolog sqlplus表示登录平台 /nolog表示无参数登录 2.创建scott用户,使用tiger密码登录。使用用户名登:conn scott/tiger@xe 语法结构:conn [用户名]/[密码]@xe; conn是链接的英文缩写。为什么使用scott用户:因为在11g版本以前都会有一个scott用户,这个scott用户便是oracle数据库的开发人员。@是登录到某个数据库,xe是我们安装的Oracle 11g EX默认创建的数据库名称,以后如果要登录到xxx数据库,便是@xxx。 3.测试数据库是否链接成功(查询数据库中的表):selcet * from emp; 表格内容正常显示也就代表安装成功 4.完成 |
sqlplus /nolog conn / as sysdba; create user scott identified by tiger; GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER; 取消区分大小写: alter system set sec_case_sensitive_logon=false; 导入scott.sql @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql 查询所有用户: select username from all_users; 登录: conn scott/tiger; 在上述成功的前提下: conn scott/tiger@xe; |
1.3知识点
1.3.1常见的数据库
Oracle、Mysql、DB2(很大,一般用于金融类型的公司),这三种数据库市场占有率90%以上,最核心的是Oracle和Mysql。
1.3.2数据库的分类
小型数据库access、foxbase:数据库本身容量小,操作结构简单,不安全。负载量小,用户大概100人以内(留言板、信息管理系统),成本在千元之内,对安全性要求不高。
中型数据库sqlservler、mysql:负载量,日访问在5000~10000,成本在万元以内(商务网站),满足日常安全需求。
大型数据库sybase、db2、oracle:海量负载,可以处理海量数据(sybase<oracle<db2海量处理能力),安全性高,相对贵。
1.3.3数据库选的原则
原则:考虑项目的负载量、经济成本、安全性。选择时不一定要选择最好的,但是需要选择最合适的。
1.4使用客户端链接数据库PLSQL
1.4.1更改配置
PLSQL\instantclient_11_2目录下的tensnames.ora文件,打开后除了注释,值保留一下代码,并匹配数据库IP和数据库实例名称。20.45.128.26数据库IP地址,OO数据库示例名称。
注意:这里更改配置后,我们在dos命令中输入的就不再是conn scott/tiger@xe;而是conn scott/tiger@127.0.01xe;
127.0.0.1XE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = XE) ) ) |
1.4.2配置环境变量
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK TNS_ADMIN = G:\PLSQLDeveloper\PLSQL\instantclient_11_2 |
1.4.3PL/SQL Developer 环境设置
位置:工具 -> 首选项 -> 链接 设置: Oracle主目录名 = G:\PLSQLDeveloper\PLSQL\instantclient_11_2 OCI库 = G:\PLSQLDeveloper\PLSQL\instantclient_11_2\oci.dll |
检测是否链接数据库,打开客户端,查看窗口左上角,是否为登录的数据库实例名,未链接成功左上角为:未登录。
二、关系数据库(database manager system)
关系数据库,是建立在关系模型基础上的数据库。借助于集合代数等数学概念和方法来处理数据库中的数据。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
标准数据查询语言SQL:”第四代语言”,更加接近人的自然语言。
关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说 Oracle 数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。
三、DML语言:数据库管理语言
SQL(Structured Query Language)结构化查询语言,为数据库的语言,在1974年由Boyce和Chamberlin提出的一种介于关系代数与关系演算之间的结构化查询语言,是一个通用的、功能极强的关系型数据库语言。
对用户实现管理的语句,并不是SQL语言,而是DML语言。DML语言:数据库管理语言database manager language。对用户的添加、删除、解锁、锁定等。
3.1Oracle基本操作
3.1.1进入数据库服务
语句:sqlplus /nolog
说明:登录到数据库示例上
3.1.2数据库连接指令
关键词:conn-->connection
语法结构:conn 用户名/密码@网络服务名
语句:conn scott/tiger@xe;(不是SQL语句,只是一个数据库的登录语句) xe表示数据实例--数据库名称
3.1.3显示当前用户名
语句:show user;
示例:USER 为 “SCOTT”
3.1.4退出
语句:exit
3.1.5 & 占位符
说明:可以替代变量,而该变量在执行时,需要用户输入()。
SQL语句:select * from emp where job = ‘&job’;
输入job的值:SALESMAN
SQL> select * from emp 2 ; //表示第二行 而不是只有2条数据。sql语句一定以“;”结束此句。当没有输入;,按了回车,就会显示一个2,代表第二行输入。 |
3.2用户管理
实现用户管理的账户,必须有管理用户的权限(Oracle对权限的控制非常严),才能实现用户管理。什么样的账户具有管理用户的权限——以下这两种登录方式都是以系统管理员身份(sys账户)登录数据库,是oracle系统超级管理员。具有用户创建的权利。
conn / as sysdba; conn sys/123 as sysdba; |
关于用户角色与权限详解:http://www.cnblogs.com/chinhr/archive/2011/10/10/2206631.htm。
用户创建:用有管理用户权限的账户创建一个新的账户,但是在没有给这个心账户权限的时候,还不能使用它登录。
create user [用户名称] identified by [密码]; 用户已创建。 |
删除用户:一般以dba的身份去删除某个用户,如果用其他用户去删除用户则需要具有drop user的权限。注:如果该用户的账户下已有数据信息(已建表etc..)在删除的时候同时删除表数据信息,可以在后面加cascade,就可以删除这个需要删除的用户下的表数据信息。
drop user [用户名] [cascade]; 用户已删除。 |
用户授权管理:给一个用户赋权限使用命令grant,回收权限使用命令revoke。grant dba to wb;,就是赋予dba权限给wb。
grant [权限] to [需要授权的用户名]; 授权成功。 |
用户的状态:锁定用户、解锁用户。
alter user [用户名] account [lock/unlock]; 用户已更改。 |
第二章 Oracle数据库
oracle数据库,关系型数据库,基于关系模型设计。oracle,关系是如何维护?通过数据库中的二维表进行维护。SQL:结构化查询语言。(查询、增加、修改、删除),最难点:查询(单表、多表查询)。
一、表(Tabel)
1.1理解表
ID |
NAME |
AGE |
HOBBISE |
S001 |
Daming |
23 |
swimming |
S002 |
Kitty |
12 |
running |
行:表示记录(实际中的数据),一行代表一条记录。列:字段(属性) 字段名 与 字段值。表中记录与java中实例化对象什么关系?——表中一条记录,等同于java中一个实例化对象。java中创建对象的四种方式:new 反射 反序列化 clone。
1.表是从属于用户的:select * from scott.emp;。查询表(用户名.表名),当前用户查询自己的表时,用户名可以省略,其他用户查询别的用户表,不能省略,同时必须存在权限。
2.表是逻辑表(概念表),不是物理表。块(最小的储存单位是块,8k)-->区(连续块)-->段(连续区)-->表(多个段),数据段不全是表,表一定是数据段。还有其他段:如索引段。数据库存储的基本单位:block(块)-->8k。不同的数据库中块的大小不一样。8k是oracle下的默认值,可以改。
1.2表结构
表名、字段(字段名,类型,约束)、记录组成。
DB |
JAVA |
表名 |
类名 |
字段名 |
属性名 |
字段类型:
|
属性类型: 基本类型 引用类型 |
记录:数据 |
对象:new |
1.2.1char与varchar2区别
将”char”用varchar2类型的变量去存储,开辟了4个空间,这时候,我们想给这个变量重新赋值”ch”,只需要2个空间,那么varchar2会自动删除多余的空间。但是char不会。所以:varchar2可变字符串,char不可变。没有优劣之分,只有适用于不同的场合。
varchar2查询模式,在不确定长度下,查询数据需要按照长度变化进行比对——查询的时间复杂度提升。用时间换空间。
char查询模式:在定长下查询数据,时间复杂度降低,存在冗余,浪费空间,孔家你的复杂度提升。用空间换时间。
场景: 用户登录 手机号登录----->? 手机号定长,手机号属于设点数据(会经常查找),这时候应该选用char。 |
二、Scott用户表
2.1查看用户表
SQL:select tabel_name from tabs; 查看该用户下所有的表
- dept:部门表
- emp:雇员表
- salgrade:工资登记表
- bonus:奖金表
oracle命令不区分大小写(SELECT与select),存储数据内容,区分大小写。
2.2查看表结构
DML:desx [表名]; 查询表的结构
- dept部门表
表名 |
dept |
||||
主键 |
deptno |
||||
字段名 |
中文 |
类型 |
为空 |
默认值 |
其他说明 |
deptno |
部门编号 |
number(2) |
否 |
|
主键 |
dname |
部门名称 |
varchar2(14) |
|
|
|
loc |
地址 |
varchar2(13) |
|
|
|
备注 |
|
- emp雇员信息表
表名 |
emp |
||||
主键 |
empno |
||||
字段名 |
中文 |
类型 |
为空 |
默认值 |
其他说明 |
empno |
雇员编号 |
number(4) |
否 |
|
主键 |
ename |
雇员名称 |
varchar2(10) |
|
|
|
job |
岗位工种 |
varchar2(9) |
|
|
|
mgr |
上级|经理人 |
number(4) |
|
|
|
hiredate |
雇佣日期 |
date |
|
|
|
sal |
工资 |
number(7,2) |
|
|
|
comm |
奖金|津贴 |
number(7,2) |
|
|
|
deptno |
部门编号 |
number(2) |
|