前置:LAMP LNMP
企业架构,服务定位示例
车库 菜场篮子 生活中的数据微信(视频、音频、图片文字)、饿了吗、美团、qq、绝地求生、王者荣耀
一、数据库基本概念
数据
1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。
2)数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。 相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数据的存储就能够井然有序。
使用一些介质进行存储,例如文字存在文档中
数据库可以完成数据持久化保存+快速提取
数据如何保存:最外层是mysql服务---》mysql数据库
---》数据表---》记录为行,字段为列--->数据保存在一行行记录中
表
记录:行
字段(属性): 列
以行+列的形式就组成了表(数据存储在表中)
关系数据库的表由记录组成,记录由字段组成,字段由字符或数字组成。它可以供各种用户共享, 具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。
数据库
数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合
举例南京中博(库) 各个班级(表)
数据库管理系统
数据库管理系统(DatabaseManagementSystem,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作
BMS主要包括以下功能:
1)数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
2)数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。
3)数据操纵功能:包括数据查询统计和数据更新两个方面。
4)数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
5)通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行数据交换。
数据库系统
数据库系统(DatabaseSystem,DBS)是一个人机系统,一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过 DBMS 操作数据库,也可以通过应用程序操作数据库。
应用程序是利用DBMS为解决某个具体的管理或数据处理的任务而编制的一系列命令的有序集合。如果应用程序比较完善,能够提供友好的人机界面,并编译成可执行文件发行,使得普通用户不需要具备计算机的专业知识,在较短时间就学会使用,那么就称为数据库应用软件。 navicat
常用的数据库应用软件有人事管理、财务管理、图书管理等信息管理软件及各类信息咨 询系统等。
数据库管理员(DatabaseAdministrator,DBA)负责数据库的更新和备份、数据库系统的维护、用户管理等工作,保证数据库系统的正常运行。DBA 一般由业务水平较高、资历较深的人员担任。
需要注意的是数据库、数据库系统、数据库管理系统,甚至数据库表等名词,在日常讨论中通常不严格区别。遇到此情况时,可以根据具体情况,判断出实际所指的是什么。
DBMS的工作模式如下:
1>接受应用程序的数据请求和处理请求
2>将用户的数据请求(高级指令)转换为复杂机器代码(底层指令)
3>实现对数据库的操作
4>从数据库的操作中接受查询结果
5>对查询结果进行处理(格式转换)
6>将处理结果返回给用户
二、数据库发展史
发展的三个阶段:
1、 层次型和网状型: 代表产品是1969年IBM公司研制的层次模型数据库管理系统IMS。
2、 关系型数据型库: 目前大部分数据库采用的是关系型数据库。1970年IBM公司的研究员E.F.Codd提出了关系模型。其代表产品为sysem R和Inges。
3、第三代数据库将为更加丰富的数据模型和更强大的数据管理功能为特征,以提供传统数据库系统难以支持的新应用。它必须支持面向对象,具有开放性,能够在多个平台上使用。管理技术的3个阶段1 人工管理2 文件管理3 数据库系统
mariadb
第三代数据库
⭐一些新的元素被添加进主流数据库系统中
引申:SQL + NoSQL 组合使用
web ——》 redis ——》mysql
CPU ——》 缓存 ——》内存
三、关系型数据库
⭐⭐ 实体-关系 E-R
记录(行) 表示了一个实体(的属性)
而E-R图:
实体与实体之间的联系(关系)
即 表与表的关系
关系数据库4-3
⭐⭐ 客户编码:主键(类比入学学号)
主键特性:唯一、非空
盐值加密
非关系型数据库
关系型数据库: 适用于对关系很明确的数据建立模型、定义、存储数据
非关系型数据库: 存储海量数据,给与”大数据“进行分析,筛选出有价值的
部分
Not Only SQL 不仅仅数据库 还可以缓存数据
键值 键就是变量名 值就是变量值
引申:redis 持久化方式
以键值存储数据,数据保存在内存中,但会定期将数据写入磁盘(持久化方式)
高德:实时分析平台,
使用非关系型数据库存储,如果需要持久化,就可以使用redis
Memcached、Redis、MongoDB、HBase
1)描述主流的数据库系统
关系型数据库:
Mysql(Oracle公司) 、 SQL server(微软) 、access(微软公司office产品)
Oracle 、DB2(IBM公司),sybase(sybase) 等等
2)数据库管理系统DBMS 客户端 进行数据获取的时候过程
-
首先,DBMS客户端建立与DBMS服务器的连接。这通常涉及到客户端向服务器发送一个连接请求,以便建立一个网络连接。
-
一旦连接建立成功,客户端会向服务器发送一个SQL查询语句。该查询语句通常包含一些关键字和条件,以指定所需数据的类型和特征。
-
服务器收到查询语句后,会解析该语句并执行它,以便从数据库中检索所需的数据。查询的过程可能包括对一个或多个表进行扫描,以及应用过滤条件和其他查询限制。
-
一旦服务器完成数据查询操作,它将结果发送回客户端。结果可能是一个数据集合,其中包含所需的数据记录、行或列等信息。客户端可以选择将结果保存到本地计算机上的一个文件或者内存中。
-
最后,客户端可以对返回的数据进行处理和分析。这通常涉及到对数据进行排序、过滤、分组或计算等操作,以便得到更有意义的信息。客户端也可以使用数据来生成报表、图表或其他类型的数据可视化。
3)关系型数据库和非关系型数据库的区别
关系数据库:
关系数据库结构是二维数据库表,二维表当中每个字段(列)用来描述对象的一个属性,每个记录(行)用来描述一个对象的信息(完整信息),关系数据库写到哪里也就是存储在硬盘当中 读写系统就会受到的IO限制或者瓶颈
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
缓存加速软件
非关系型数据库(NoSQL):
MongoDB 、 Redis(内存数据库/缓存数据库)K-V键值对、与之类似的Memcache,K-V键值对
redis-memecache对比:
相同点:存储高热数据(在内存中高速运行)
不同点:redis可以做持久化保存,可以存储对象
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
4、好多数据写在内存中
Mysql 数据库
⭐⭐日志
数据库日志文件用于备份,恢复,故障定位、分析是最核心的部分
mysql 与 oracle 日志有所区别
mysql 写一条数据,同步到日志中一条
PS:insert into ky11 (id,name,score) values(1,'zhangsan',20);
oracle :重做日志组
一个组中至少3个日志成员,轮流存储日志
还会有另一个组与之同步/备份
阿里云OSS对象存储,一式三份备份(使用重做日志组思想)
对象存储:存储大都是一些静态文件,图片、音频、视频
不能直接在对象存储中修改数据
域名链接
飞天平台,盘古系统(分布式存储),钟馗:安全,伏羲:分布式应用调度 女娲:选举/调度,盘古一式三份
神农:分布式监控
Mysql 存储引擎
myisam 和innodb
myisam:快速读取,不支持事务
innodb:更注重写,支持事务
第二部分
mysql 数据库管理
查看数据库信息
show database
查看数据库中的表信息
use 数据库名 #切换到书库中
show tables
show tables in mysql
显示数据表的结构(字段)
describe user;
Field:字段名称
type:数据类型
Null :是否允许为空
Key :主键
Type:数据类型
Null :是否允许为空key :主键
Default :默认值
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id:1 3 5 7
常用的数据类型:
int:整型 用于定义整数类型的数据
float:单精度浮点4字节32位 准确表示到小数点后六位
double:双精度浮点8字节64位
char:固定长度的字符类型 用于定义字符类型数据。 20字节 4
varchar:可变长度的字符类型 20 4
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位 指定长度数组
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
主键是唯一的,但主键可以由多个字段构成
MySQL数据库的数据文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为“.frm”、“.MYD”和“.MYI”。
MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。
“.MYI”文件也是专属于 MyISAM 存储引擎的,主要存放 MyISAM 表的索引相关信息。对于 MyISAM 存储来说,可以被 cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM 表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。
MyISAM 存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件
(frm,myd,myi)。 每个表都有且仅有这样三个文件做为 MyISAM 存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI 文件中。
另外还有“.ibd”和 ibdata 文件,这两种文件都是用来存放 Innodb 数据的,之所以有两种文件来存放 Innodb 的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储 方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和 MyISAM 数据相同的位置。如果选用共享存储表空间来存放数据,则会使用 ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata 文件。
-----------SQL 语句-------------
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)
1、DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
create
drop
alter
创建新的数据库
CREATE DATABASE 数据库名;
创建新的表
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
CREATE DATABASE kgc_school;
USE kgc_school;
CREATE TABLE KY13 (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'', PRIMARY KEY (id));
DESC KY13;
#NOT NULL 不允许为空值
#DEFAULT'' 默认值为空
PRIMARY KEY :主键一般选择没有重复并且不为空值的字段
删除指定的数据表
use 数据库名
DROP TABLE 表名
DROP TABLE [数据库名.] 表名;
#如不用USE进入库中,则需加上数据库名
删除指定的数据库
DROP DATABASE 数据库名;
2、DML管理表中的数据记录 ---- 数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
insert
update
delete
格式:
INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);
示例:
INSERT INTO KY13 (id,name,score,passwd) values(1,'zhangsan',70.5,PASSWORD('123456'));
#PASSWORD('123456'):查询数据记录时,密码字串以加密形式显示:若不使用PASSWORD(),查询时以明文显示。
INSERT INTO zzz VALUES(2,'lisi',90.5,654321) ;
SELECT * FROM zzz ; #查询表的数据记录
#修改、更新数据表中的数据记录
格式:
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
示例:
UPDATE zzz SET passwd=PASSWORD('') WHERE name='zhangsan';
UPDATE zzz SET name='wangxiaoer',passwd='' WHERE id=3;
在数据表中删除指定的数据记录
格式:
DELETE FROM 表名 [WHERE 条件表达式];
示例:
DELETE FROM zzz WHERE id=4;
3、DQL查询数据记录
select
格式:
SELECT 字段名1,字段名2[,...] FROM 表名[WHERE 条件表达式];
示例:
SELECT * FROM zzz;
SELECT id,name,score FROM zzz WHERE id=2;
select name from zzz\G #以列表方式竖向显示
select * from info limit 2; #只显示头2行
select * from info limit 2,3; #显示第2行后的前3行
#修改、更新数据表中的数据记录
格式:
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
示例:
UPDATE zzz SET passwd=PASSWORD('') WHERE name='zhangsan';
UPDATE zzz SET name='wangxiaoer',passwd='' WHERE id=3;
数据表高级操作
扩展
在数据表中删除指定的数据记录
格式:
DELETE FROM 表名 [WHERE 条件表达式];
示例:
DELETE FROM zzz WHERE id=4;
4、DCL
修改表名和表结构
ALTER TABLE 旧表名 RENAME 新表名;
例:
ALTER TABLE zzz RENAME yyy;
ALTER TABLE yyy RENAME zzz;
扩展表结构(增加字段)
ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
#default '地址不详':表示此字段设置默认值为地址不详,可与NOT NULL配合使用
ALTER TABLE yyy ADD address varchar(50) NOT NULL default '地址不详';
修改字段(列)名,添加唯一键
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
unique key:唯一键(特性:唯一,但可以为空,空值只允许出现一次)
Primary key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。)
ALTER TABLE yyy CHANGE name user_name varchar(10) unique key;
#CHANGE可修改字段名、数据类型、约束等所有项。
ALTER TABLE 表名 modify column 字段名 类型。
数据库中表 字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有数据出错)
删除字段
格式:
ALTER TABLE 表名 DROP 字段名;
示例:
ALTER TABLE yyy DROP passwd;
##案列扩展
use school;
create table if not exists info (
id int(4) zerofill primary key auto_increment, #指定主键的第二种方式
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
------------------------------------------------------------------------------------------------------------------------
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;
自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
------------------------------------------------------------------------------------------------------------------------