数据库概论
数据库是指长期存储在计算机内有组织可共享的数据集合。数据库中的数据以及数据之间的关系按照一 定的数据模型
组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定的范围 内可以被多个用户共享
数据模型:层次模型、网状模型、关系模型,据说下一代是对象模型
关系型数据库是建立在关系数据模型基础上的数据库,借助集合代数的概念和方法处理数据库中的数 据,同时也是一个被组织成具有描述的二维表格,表格的实质就是装载数据项的收集器,这些表格中的 数据能以不同的方式被存取或者重新召集,而不需要更新组织数据库的表格。
目前常见
RDBMS
主要有
Oracle
收费【运行稳定、性能优异、大型企业级应用开发首选】、
MySQL
免费 【开源免费、体积小、速度快、适用于中小型企业应用开发】、DB2
收费【速度快、可靠性好、适用于 海量数据存储,主要用于在使用IBM
组件时】、
SQLServer
【主要在
.net
应用】、
Sybase
【电信行业历 史原因使用】
DBMS
数据库管理系统
是位于用户和操作系统之间的一层数据管理软件。科学地组织和存储数据,高效地获取和维护数据
基础功能:数据定义功能
DDL
、数据操纵功能
DML
、数据库的运行管理、数据库的建立和维护功能
数据库特点:
数据库中的数据尽可能不重复,以最优化的方式为多种应用服务
数据结构独立于应用
对数据的
CRUD
由统一软件进行管理和控制
DBMS
数据模型
数据模型从应用开发的角度上来说可以分为
2
个不同的层次
概念模型或者逻辑模型,从用户的观点来对数据和信息进行建模,可以使用
ER
图进行描述
E
实体(矩形),属性列采用椭圆表示,采用无定向线连接实体和属性
R
关系
(
菱形框
)
,数据和数据之间的关系有三种:
1:1
、
1:n
或者
n:1
、
n:m
容易出现的错误:不能分析出主外键(主键是标识属性,不可能有外键)
物理模型。在概念模型的基础上考虑各种具体的技术实现因素,进行数据库体系结构设计。需要确
定所有的表和列,定义主外键,基于用户需求考虑范式的问题
数据库选型
---SQL
语句
关系模式
---
带表头【元数据】的二维表格。具体存储位置对用户透明
关系模型的特点
建立在严格的数学概念之上【唯一】 实体和各类联系都用关系表示
数据的操纵对象是关系,返回结果也是关系 关系模型的存取路径对用户透明,优点在于数据独立性、高安全性,简化编程
缺点:存储路径对用户透明导致查询效率不如非关系型数据库
SQL
SQL
结构化查询语言是一种数据库操作的非过程式编程语言,用于存取数据以及查询、更新和管理关系 型数据库系统,一般脚本文件后缀为.sql
经过
ANSI
和
ISO
标准化组织结构进行标准化,但是各个数据库管理系统都对标准
SQL
规范进行了编改和 扩充,扩展部分各个数据库不通用,标准部分通用
SQL
的特点:
统合统一、高度非过程化
面向集合的操作方式
以同一种语法结构提供两种使用方法,命令行方式交互和嵌入主语言
语法简单,其中只有
94
个英文单词,核心功能只有
6
个单词【
insert update delete select
】
NoSQL
NoSQL
泛指非关系型数据库,主要用于针对超大规模和高并发的社交
SNS
类型网站的解决方案
常见的
NoSQL
数据库有
4
种类型:
key-value
数据库,使用
hash
表存储数据。例如
Redis
列存储数据库,主要针对分布式的海量数据,例如
HBase
文档型数据库,主要存储版本化的文档信息,例如
MongoDB
图形化数据库,主要用于计算数据之间的关系,例如
Neo4j
NoSQL
适用场景
数据模型比较简单
需要灵活性很强的
IT
系统中
对数据库性能要求较高
不需要高度数据一致性
SQL vs NoSQL
复杂查询
SQL
数据库比较擅长
SQL
数据库不适合分层次的数据存储,
NoSQL
可以很好的实现数据的分层次存储,更适合大数据
对于要求数据严格一致性的应用中
SQL
非常使用,而且稳定,能够保证数据操作的原子性和一致
性;而
NoSQL
对事务的处理能力有限,一般保证最终一致性 SQL厂商支持,而
NoSQL
是社区支持
性能对比中,
NoSQL
明显优于
SQL
数据库,一般
NoSQL
都充分的利用系统的内存资源
NoSQL
数据库开发方便,不用考虑数据关系和格式
MySQL
数据库
MySQL
使用的是
SQL
语句,体积小、速度快、免费开源的关系型数据库
MySQL
可以支持
6
万多张表,约
50
亿行的企业级数据库应用
每个表可以最多支持
64
个索引,每个所以可以由
1-16
个列构成,最大索引宽度为为
1000
字节
正常字符串的比较不区分大小写
MySQL
数据库最大限制取决于操作系统对文件大小的限制,不是
MySQL
内部限制
使用
MySQL8
MySQL8
比
MySQL5.7
快
2
倍
MySQL
体系结构概述
MySQL
是由
SQL
接口、解析器、优化器、缓存、存储引擎
1
、客户端向
MySQL
服务器发送一个
SQL
语句
2
、服务器首先检查缓存,如果命中则立刻返回存储在缓存中的结果,否则下一步
3
、服务器首先进行
SQL
语句解析、预处理,再由优化器生成对应的执行计划
4
、
MySQL
服务器根据执行计划,调用存储引擎的
API
执行查询
5
、最后将查询结果返回客户端,同时缓存查询结果
MySQL
基本使用
windows
1
、下载
https://dev.mysql.com/downloads/mysql/
MySQL
本来是完全免费的产品,被
Oracle
收购后,现在分为
3
个不同的版本:
MySQL
企业版,收费或者试用
MySQL
社区版,免费的
MySQL
高级集群版,收费
MySQL
经典版,老版本,免费
在线安装
需要网络支持
选择安装类型,这里选择使用
选择需要安装的产品和特征
开始执行环境配置
绿色安装
解压压缩文件
mysql-8.0.15-winx64.zip
,将解压得到的目录可以移动到任何位置
执行初始化操作,首先进入
mysql
的
bin
目录,在
cmd
窗口中执行命令
mysqld
--initialize --console
注意:如果
data
目录已经存在,则需要删除
data
目录后再执行命令
在执行初始化操作过程中会显示一个临时生成的口令
使用
mysqld
--
install
将
mysql
添加到系统服务中,默认当机器启动时会自动启动
mysql
服务
使用
net start mysql
启动数据库服务
使用命令
mysql
-
uroot
-
p
打开客户端连接已经启动的数据库服务,这里需要输入上面生成的临时口令
修改口令
alter user 'root'@'localhost' identified with mysql_native_password by '
新口
令
'
关闭服务器
net stop mysql
删除
mysql
系统服务
mysqld
--
remove
常用命令
启动客户端:在
bin
目录下
mysql
-
uroot
-
p123456
命令格式为:
mysql -u
用户名
-p
口令
-P
端口号
-h
主机名称 。在实际应用中,不建议直接使用
-p
口
令的这种格式
如果正常启动,则可以看到命令提示符
mysql>
如果需要在任意目录都可以打开客户端,则需要将
bin
的绝对目录添加到
path
系统环境变量中
查看所有的数据库
show databases
;
注意
information_schema
、
mysql
、
sys
、
performance_schema
都属于系统数据库,不要直接操
作这些数据库
切换当前数据库
use
数据库名称
;
查看当前数据库下的所有数据表
show tables
;
查看某个数据表的结构定义
desc
数据表名称
;
放弃正在输入的命令
\c
显示命令清单
\h
退出客户端
\q
,也可以使用
exit
或者
quit
查看服务器的状态信息
\s
退出客户端
quit
SQL
语句
在
MySQL
中可以将
SQL
分为
4
大类
DDL
数据定义语言,
create
创建、
alter
修改、
drop
删除、
truncate
截断
DML
数据操纵语言,
insert
插入、
update
修改、
delete
删除
DQL
数据查询语言,
select
查询
DCL
数据控制语言,
grant
授权、
revoke
回收权限
DDL
数据定义语言
用于定义数据库对象的操作语句
数据库操作
创建操作
注意:
DATABASE
不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再
删旧库完成
语法规则
create database
数据库名称
default character set utf8
,一般默认编码字符集为
latin1
如果数据库创建成功,则自动在数据文件夹
data
下新增一个
test
目录
删除操作
语法规则
drop database
数据库名称
;
查看所有数据库
show databases
;
mysql
中允许同时打开多个数据库,不同的数据库管理系统不一样
切换当前数据库
use
数据库名称
;
查看当前操作的数据库
查看数据库的创建语句
create
database test default character
set
utf8;
--
创建数据库,名称为
test
,默认编码
字符集为
utf-8
--
如果数据库已经存在,则再次创建会报错
create
database if
not
exists test default character
set
utf8;
--
如果
test
已经存在
则不执行创建操作,同时不会报错
drop
database test;
--
删除指定数据库;如果数据库不存在则报错
drop
database if exists test;
--
如果存在则删除,如果不存在也不报错
use test;
--
如果数据库存在则切换到指定的数据库
test
下进行操作;如果不存在则报错
select
database();
show
create
datbase test;
注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上
“
数
据库名
.”
。
更改数据库字符集
默认系统数据库
系统数据库就是供
DBMS
使用的数据库,如果损坏则会导致
DBMS
无法正常启动,所以一般不建议直接操作
information_schema
记录所有数据库和数据库中表的信息
mysql
记录时区、权限之类的配置信息
sys
保存和锁、统计相关的信息
performance_schema
用于实现对运行过程的资源的使用情况的统计
test
非系统数据库,仅供测试样例
数据表的操作
创建数据表基本语法:
create table
数据表的名称
(
数据列的名称 数据类型 约束规则
,......)engine=
存储引擎名称
default charset utf8
;
数据表创建完成,则会发现在
data/test
目录下出现一个文件
tb_student.ibd
一般使用的存储引擎
engine
常见的有
innodb
和
myisam
两种,如果使用
myisam
则会创建两个文件,
1
、
.myd
数据信息文件,其中包含表的数据;
2
、
.myi
索引信息文件,是用于提高查询效率的索引数查看表中的列定义 desc tb_student
;
查看具体的列定义
show create table tb_student
;
ALTER DATABASE
数据库名
CHARACTER SET
字符集
;
#
比如:
gbk
、
utf8
等
create table
tb_student(
--
这里可以加入
if not exists
表示不存在时才进行创建。注意在一
个数据库中的表名称不允许重复。按照阿里的规范,要求基表名称必须使用【
tb_
表】
id
bigint
primary key auto_increment,
name
varchar
(
20
)
not
null
,
sex
boolean
default
1
--
在
mysql
数据库中有一些属性数据类型的别名
) engine=innodb default charset utf8;
--
实际上从
MySQL5.5
开始默认存储引擎就是
innodb
,
但是一般建议还是添加上存储引擎的设置
标识符命名
数据库涉及的字符规范,注意不是语法规则,属于建议性质的规则
采用
a-z
英文字母、数字
0-9
和下划线
_
组成,共
63
个字符,不能出现其他字符,除非是注释
不区分大小写 使用中文字符实际上是不会有语法错误的,但是不建议
一般命名长度不要超过
30
个字符的系统限制,变量名称由于需要使用
@
标识符,所以长度限制为
29 数据库对象、变量的命名都采用英文字符,禁止使用中文命名,绝对不允许在对象名称中间出现空格 如果在命名过程中破坏规则实际上引入反引号就好`
,注意不是单引号
create table `t 1`(id int)
;
小心保留字,尽量保证命名中不采用保留字,避免容易产生冲突
注意开发中字段名称和类型名称的一致性
数据类型
定义数据类型就是定义列,数据类型决定数据的特性
数据类型主要分为字符串类型,浮点书类型和定点数类型,日期类型以及二进制类型
数据类型在不同的存储引擎上表现不同
根据所采用的数据类型,需求和数据特性选择数据类型