[TOC]
数据库
数据库的介绍
什么是数据库
数据仓库
常用的数据库有DB2、Oracle、Mysql、SQL Server、sQLite等。
这些数据库的使用都需要安装相应的软件,启动数据库后我们才可以访问数据库里面的内容。而访问其内容的方式并不是用鼠标直接打开数据库文件查看,一般都是用数据库管理工具或者编写程序来访问数据库。当然,数据库和访问数据库可以不在同一个位置,也就是说数据库在北京,你在深圳写一段代码可以去访问它。
数据库分类
根据存储模型可将数据库划分为关系型数据库和非关系型数据库。关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
关系型数据库(表与表之间有关系:体现为主外建)
| 分类 | 产品 | 特点 |
|---|---|---|
| 小型 | access、foxbase | 负载量小,用户大概100人以内(留言板、信息管理系统);成本在千元之内对安全性要求不高 |
| 中型 | SQL Server、MySQL | 负载量,日访问在5000~10000;成本在万元以内(商务网站)﹔满足日常安全需求 |
| 大型 | Sybase、db2、Oracle | 海量负载,可以处理海量数据( sybase < oracle < db2海量处理能力);安全性高,相对贵 |
数据库类型大全
| 数据类型 | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
|---|---|---|---|---|---|
| 精确数字 | TINYINT SMALLINT MEDIUMINT INTEGER BIGINT NUMERIC | SMALLINT INTEGER NUMERIC | SMALLINT MEDIUMINT INTEGER BIGINT NUMERIC | SMALLINT MEDIUMINT INTEGER BIGINT NUMERIC | 动态类型 |
| 近似数字 | FLOAT DOUBLE PRECISION | BINARY_FLOAT BINARY_DOUBLE | REAL DOUBLE PRECISION | REAL DOUBLE PRECISION | 动态类型 |
| 定长字符串 | CHAR | CHAR | CHAR | CHAR | 动态类型 |
| 变长字符串 | VARCHAR | VARCHAR2 | VARCHAR | VARCHAR | 动态类型 |
| 字符串大对象 | TEXT | CLOB | VARCHAR(MAX) | TEXT | 动态类型 |
| 日期 | DATE | DATE | DATE | DATE | 动态类型 |
| 时间 | TIME | —— | TIME | TIME | 动态类型 |
| 时间戳 | DATE | DATE | DATE | DATE | 动态类型 |
| 二进制 | BINARY VARBINARY BLOB | BLOB | BINARY VARBINARY | BYTEA | 动态类型 |



DBMS
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性
用户通过DBMS
访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition
Language)和数据操作语言DML (Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作,以及数据库控制语言DCL(Data Control Language),用来设置或更改数据库用户或角色权限的语句
1 | 数据库和数据库管理系是一个东西吗? |

MySQL
SQL Server
数据库介绍
什么是数据库
狭义:
存储数据的仓库
广义:
可以对数据进行存储和管理的软件以及数据本身统称为数据库
数据库是由表、关系、操作组成
为什么需要数据库
几乎所有的应用软件的后台都需要数据库
数据库存储数据占用空间小 容易持久保存
存储比较安全
容易维护和升级数据库移植比较容易
简化对数据的操作
为将来学习Oracle做准备
B/S架构里面包含数据库
数据库的安装与卸载
windows安装
百度
基于Docker安装SqlServer
系统安装要求
Linux系统-CentoS7
远程工具MobaXterm
必须docker引擎1.8及更高版本
sql安装先决条件
| 组件 | 要求 |
|---|---|
| 硬盘 | sQL Server要求最少6 GB的可用硬盘空间。磁盘空间要求将随所安装的SQL Server组件不同而发生变化。有关详细信息,请参阅本文后面部分的硬盘空间要求。有关支持的数据文件存储类型的信息,请参阅Storage Types for Data Files。 |
| 监视 | SQL Server要求有Super-VGA (800x600)或更高分辨率的显示器。 lnternet 使用Internet 功能需要连接Internet(可能需要付费)。 |
| 内存* | 最低要求: Express Edition:512 MB所有其他版本:1 GB 推荐: Express Edition: 1 GB所有其他版本:至少4GB,并且应随着数据库大小的增加而增加来确保最佳性能。 |
| 处理器速度 | 最低要求:x64处理器:1.4 GHz推荐:2.0 GHz 或更快 |
| 处理器类型 | x64处理器:AMD Opteron、AMD Athlon 64、支持 Intel EM64T的Intel Xeon,以及支持EM64T的Intel Pentium lV |
开始安装
开始安装
拉取SqlServer2019镜像
1 | sudo docker pull mcr.microsoft.com/mssq1/server : 2019-1atest |
准备数据库文件的挂在目录–/root/docker_volume/mssql 同时给目录设置权限
1 | chmod -R 777/root/docker_volume/mssq1 |
启动一个容器
1 | sudo bocker run -e "ACCEPT_EULA=Y" -e "sA_PASSWORD=Sa123456"\ |
基于docker安装后测试连接到SQL Server
下列步骤在容器内部使用SQL Server命令行工具sqlcmd来连接SQL Server。
1、使用docker exec -it命令在运行的容器内部启动交互式Bash Shell。在下面的示例中,sq11是在创建容器时由–name参数指定的名称。
1 | sudo docker exec -it sq11 "bash" |
2、在容器内部使用完整路径通过sqlcmd进行本地连接。
1 | /opt/mssq1-too1s/bin/sq1cmd -s loca1host -u SA -P "sa123456" |
3、如果成功,应会显示sqlcmd命令提示符:1>。
注意防火墙和端口问题
1、启动防火墙就必须要手动放行1433端口、或者关闭防火墙
#查看防火墙状态
1 | firewa71-cmd --state |
#开启防火墙
1 | systemctl start firewalld.service |
#关闭防火墙
1 | systemctl stop firewalld.service |
#重启防火墙
1 | systemctl restart firewalld.service |
#重新载入配置
1 | firewall-cmd --reload |
预备知识
学习数据库必须的学习数据库原理么
需要一定的数据库原理
学习SqlServer 2005必须的先学一门编程语言么
不需要,懂更好理解TL_SQL
数据结构和数据库的区别
数据库是在应用软件级别研究数据的存储和操作
数据结构是在系统软件级别研究数据的存储和操作
什么是连接
客户端连接数据库本事,发送sql命令行,给数据库查询数据。数据库将查询到的数据返回到客户端。
有了编程语言为什么还需要数据库
对内存数据操作时编程语言的强项,但是对硬盘数据操作却是编程语言的弱项
建议初学者从三个方面学习数据库
数据库的使用
创建数据库和表
以下步骤在数据库sql语句中,创建一个名为TestDB的新数据库。
1、在sqlcmd命令提示符中,粘贴以下Transact-SQL命令以创建测试数据库:
1 | CREATE DATABASE TestDB ; |
2、在下一行中,编写一个查询以返回服务器上所有数据库的名称:
1 | SELECT Name from sys .databases ; |
3、前两个命令没有立即运行。在新行中键入Go以运行前面的命令:
1 | GO |
插入数据
1、在sqlcmd命令提示符中,将上下文切换到新的TestDB 数据库
1 | USE TestDB; |
2、创建名为Inventory的新表
1 | CREATE TABLE Inventory ( |
3、将数据插入新表
1 | insert into Inventory values(1, 'banana', 150); insert into Invertory values(2, 'orange', 154); |
4、要运行上述命令的类型GO
1 | GO |
查询数据
1、通过sqlcmd命令提示符输入查询,以返回Inventory表中数量大于152的行
1 | select * from Inventory where quantity > 152; |
2、运行以下命令
1 | go |
推出sqlcmd命令提示符
1、要结束sqlcmd会话,请键入QUIT:
1 | quit |
2、要在容器中推出交互式命令行,请键入exit。退出交互式Bash Shell后,容器将继续运行
1 | exit |
sqlcmd实用工具安装
在windows上安装sqlcmd工具
下载地址: https://docs.microsoft.com/zh-cn/sql/tools/sqlcmd-utility?view=sql-server-ver15
使用sqlcmd工具连接
从容器外连接
还可以从支持SQL连接的任何Linux、Windows或macOS外部工具连接到Docker计算机上的SQL Server实例。以下步骤在容器外使用sqIcmd连接在容器中运行的SQL Server。这些步骤假定你已在容器外安装了SQLServer合令行T具。使用其他丁具时,同样的原则依然适用,但连接过程因工具而异。
1、使用ifconfig或ip addr查找容器主机的IP地址。
2、对于本示例,请在客户端计算机上安装sqlcmd工具。有关详细信息,请参阅在 Windows 上安装 sqlcmd或在Linux上安装 sqlcmd
3、运行sqlcmd,指定IP地址和映射容器中的端口1433的端口。本例中为主机上的相同端口1433。如果在主机上指定了不同的映射端口,则在此处使用它。还需要在防火墙上打开相应的入站端口以允许连接
1 | sqlcmd -s 192.168.52.75,1433 -U SA -p "sa123456" |
Win下 SQL Server管理工具连接
1、输入用户名 sa
2、输入密码 Sa123456
3、连接数据库引擎
Oracle
ORACLE简介
(一)什么是ORACLE
ORACLE 数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。
ORACLE通常应用于大型系统的数据库产品。
ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
ORACLE数据库具有以下特点︰
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
(二)ORACLE体系结构
1.数据库
Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库
⒉.实例
一个Oracle实例Oracle Instance 有一系列的后台进程Backguound Processes)和内存结构( Memory Structures)组成。一个实例只能关联一个数据库,访问一个数据库;但一个数据库可以有n个实例。(RAC)
oracle实例:位于物理内存的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存可以被所有进程访问。Oracle用它们来管理数据库访问。用户如果要存取数据库〈也就是硬盘上的文件)里的数据,必须通过Oracle实例才能实现,不能直接读取硬盘上的文件。实际上,Oracle实例就是平常所说的数据库服务(service)。在任何时刻,一个实例只能与一个数据库关联,访问一个数据库;而同一个数据库可由多个实例访问(RAC)
3.数据文件( dbf )
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
4.表空间
表空间是Oracle对物理数据库上相关数据文件(ORA或者DBF文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空间)。
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。



Oracle安装与配置
windows中安装与配置
0002oracle环境搭建(下载和安装)_哔哩哔哩_bilibili
直接装 ,成功万事大吉,失败兜兜转转
(一) VMware 虚拟服务器 win10
垃圾 装个虚拟机就行了
(二)网络配置

(三)安装ORACLE数据库
直接安装
(四)SQLPlus远程连接ORACLE数据库
配置首选项中的Oracle主目录与OCI库,从网上下载远程连接工具instantclient_18_5 配置主目录
Oracle主目录 : D:\Windows_data\Desktop\Oralce\instantclient_18_5
OCI库:D:\Windows_data\Desktop\Oralce\instantclient_18_5\oci.dll
从虚拟服务器中复制 tnsnames.ora 文件到指定目录
修改instantclient_18_5目录下的tnsnames.ora文件,将
本地数据库名称下的host修改为虚拟机地址

配置环境变量
TNS_ADMIN
D:\Windows_data\Desktop\Oralce\instantclient_18_5

(五)PLSQL Developer安装与配置
(六)中文编码设置
查看服务器端编码SQL:
select userenv(“language’) from dual
我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK
计算机->属性->高级系统设置->环境变量->新建
设置变量名:NLS_LANG,变量值:第1步查到的值,我的是
AMERICAN_AMERICA.ZHS16GBK

第二步配置系统环境变量:
NLS_LANG #native language suppert — language
SIMPLIFIED CHINESE_CHINA.AL32UTF8

重启pl/sql
centos7中安装与配置
项目案例:《自来水公司收费系统》
(一)项目介绍与需求分析
XXX市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。
主要功能包括:
1.、基础信息管理∶
(1)业主类型设置
(2)价格设置
(3)区域设置
(4)收费员设置
(5)地址设置
2、业主信息管理∶
(1)业主信息维护
(2)业主信息查询
3、收费管理∶
(1)抄表登记
(2)收费登记
(3)收费记录查询
(4)欠费用户清单
4、统计分析
(1)统计日报单
(2)统计月报单
… …
(二)表结构设计
业主类型(T_OWNERTYPE)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 NAME VARCHAR2(30) 是 类型名称 价格表(T_PRICETABLE)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 PRICE NUMBER(10,2) 是 价格 OWNERTYPEID NUMBER 是 业主类型ID MINNUM NUMBER(10,2) 是 区间数开始值 MAXNUM NUMBER(10,2) 是 区间数截至值 区域表(T_AREA)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 NAME VARCHER2(30) 是 区域名称 收费员表(T_OPERATOR)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 NAME VARCHAR2(30) 是 操作员名称 地址表(T_ADDRESS)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 NAME VARCHAR2(30) 是 类型名称 AREAID NUMBER 是 区域ID OPERATORID NUMBER 是 操作员ID 业主表(T_OWNERS)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 NAME VARCHAR2(30) 是 业主名称 ADDRESSID NUMBER 是 地址ID HOUSENUMBER NUMBER 是 门牌号 WATERMETER VARCHAR2(30) 是 水表编号 ADDDATE DATE 是 登记日期 OWNERTYPEID NUMBER 是 业主类型ID 收费台账(T_ACCOUNT)
字段名 类型(位数) 是否必填 说明 ID NUMBER 是 主键 OWNERID NUMBER 是 业主编号 OWNERTYPEID NUMBER 是 业主类型 AREAID NUMBER 是 所在区域 YEAR CHAR(4) 是 账务年份 MONTH CHAR(2) 是 账务月份 NUM0 NUMBER 上月累计数 NUM1 NUMBER 本月累计数 USENUM NUMBER 本月使用数 METERUSERID NUMBER 抄表员 METERDATE DATE 抄表日期 MONEY NUMBER(10,2) 应缴金额 ISFEE CHAR(1) 是 是否缴费 FEEDATE DATE 缴费日期 FEEUSERID NUMBER 收费员 
(三)创建表空间
1 | create tablespace waterboss //waterboss为表空间名称 |
(四)创建用户
1 | create user wateruser //wateruser为创建的用户名 |


(五)用户赋权
1 | grant dba to wateruser //给用户wateruser赋予DBA权限后即可登陆 |
表的创建、修改与册除
创表
语法
1 | create table 表名( |
数据类型:
1、字符型
CHAR:固定长度的字符类型,最多存储2000个字节
VARCHAR2:可变长度的字符类型,最多存储4000个字节
LONG:大文本类型。最大可以存储2个G
2、数值型
NUMBER:数值类型
例如:NUMBER(5) 最大可以存的数为99999
NUMBER(5,2) 最大可以存的数为999.99
3、日期型
DATE∶日期时间型,精确到秒
TIMESTAMP:精确到秒的小数点后9位
4、二进制型(大数据类型)
CLOB:存储字符,最大可以存4个G
BLOB∶存储图像、声音、视频等二进制数据,最多可以存4个G
实例:
创建业主表
1 | --业主表 |
修改表
1、增加字段
1 | ALTER TABLE 表名称 ADD( |
语句:
1 | --追加字段 |
2、修改字段
1 | ALTER TABLE 表名称 MODIFY( |
语句∶
1 | --修改字段 |
3、修改字段名
1 | ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名; |
语句:
1 | ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE; |
4、删除字段名
1 | alter table 表名称 drop column 列名1,列名2; |
语句:
1 | --删除字段 |
删除表
语法:
1 | drop table 表名 |
数据增删改
插入数据
语法︰
1 | INSERT INTO 表名[(列名1, 列名2, ...)] VALUES (值1, 值2, ...) |
执行INSERT后一定要再执行commit提交事务
向业主表插入数据︰
1 | insert into T_OWINERS VALUES( |
语句中的sysdate是系统变量用于获取当前日期,点击齿轮的图标后,再点击下图的绿色图标,此图标为commit

我们再次录入一条数据,语句如下:
1 | insert into T_OWNERS VALUES ( |
修改数据
语法︰
1 | UPDATE 表名 SET 列名1=值1, 列名2=值2, |
执行UPDATE后一定要再执行commit提交事务
需求∶将ID为1的业主的登记日期更改为三天前的日期
1 | update T_OWNERS set adddate=adddate-3 where id=1; |
删除数据
语法1∶
1 | DELETE FROM 表名 WHERE 删除条件; |
执行DELETE后一定要再执行commit提交事务
需求:删除业主ID为2的业主信息
1 | delete from T_OWNERS where id=2; |
语法2∶
1 | TRUNCATETABLE 表名称 |
比较truncat 与delete 实现数据删除?
- delete删除的数据可以rollback
- delete删除可能产生碎片,并且不释放空间
- truncate是先摧毁表结构,再重构表结构
JDBC连接ORACLE
创建工程,引入驱动包
在下图目录中可以找到驱动包ORACLE的JDBC驱动包,拷贝到工程即可使用

创建java工程waterbess ,建立lib文件夹将ojdbc.jar拷贝到此文件夹然后addbuild path

BaseDao
我们通常编写BaseDao负责加载驱动,获取数据库连接,关闭资源,代码如下:
1 | package cn.itcast.waterboss.dao; |
业主增删改代码编写
数据导出与导入
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影
响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库
中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库
该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
整库导入与导出
整库导出命令
1 | exp system/itcast full=y |
添加参数full=y 就是整库导出
执行命令后会在当前目录下生成一个叫EXPDAT.DMP(expdat.dmp)的文件,此文件为备份文件。
如果想要指定备份文件的名称,则添加file参数即可,命令如下:
1 | exp system/itcast file=文件名 full=y |
整库导入命令
1 | imp system/itcast full=y |
此命令如果不指定file参数,则默认使用备份文件expdat.dmp进行导入,如果指定file参数,则按照file指定的备份文件进行恢复。
按用户导入与导出
按用户导出
1 | exp username/password owner=wateruser file=wateruser.dmp |
按用户导入
1 | imp username/password file=wateruser.dmp fromuser=wateruser |
按表导入与导出
按表导出
1 | exp wateruser/itcas file=xx.dmp tables=t_account,t_area |
用tables参数来指定需要导出的表,如果有多个表用逗号分隔即可
按表导入
1 | imp wateruser/itcast file=xx.dmp tables=t_account,t_area |
总结
知识点总结
上机任务布置
Oracle的使用
创建用户和表空间
以超级管理员身份登录
创建表空间
创建用户
给用户授权
查询测试
1 | sqlplus /nolog; //启动sqlplus不登录 |