目录
一、数据库基础知识
(一)数据库(DB)
(二)数据库管理系统(DBMS)
(三)数据库系统(DBS)
(四) 数据库的常用操作方式
(五)MySQL架构
二、MySQL备份与还原
(一)mysql的备份与还原
(2)通过mysqldump备份数据库
三、MySQL 密码重置
(一)Linux系统下MySQL密码重置
(二)Windows系统下MySQL密码重置
四、Mysql基本操作命令
(一)sql语言简介
(二)sql查询语句实操
一、查询全部的列
二、选择表中的若干元组
三、查询满足条件的元组
四、确定范围
五、字符串匹配
五、数据库日志及应用
(一)数据库事务
(二)Mysql数据库日志
(三)通过General_log日志分析数据库、表、字段
(四)通过binlog日志恢复删除的数据
一、数据库基础知识
(一)数据库(DB)
存放数据的仓库,按照数据结构来组织、存储和管理数据的仓库。
数据库类型
- 关系型数据库:以表的形式存储数据,表与表之间有很多复杂的关联关系。关系型数据库遵循结构化查询语言SQL(Structured Query Language)标准和ACID原则。常见关系型数据库有MySQL,SQLServer,Oracle等。
- 非关系型数据库(NoSQL,Not Only SQL):是分布式、非关系型、不保证遵循ACID原则的数据存储系统。常见非关系数据库有Redis(键值对存储)、Hbase(列存储)、MongoDB(文档型数据库)、InfoGrid(图数据库)。
(二)数据库管理系统(DBMS)
数据库管理系统(Database Management System,DBMS):一种操纵和管理数据库的软件,用于建立、使用和维护数据库。能够提供数据录入、修改、查询操作。具有数据定义、数据操作、数据存储与管理、数据维护、通信等功能,且能够允许多用户使用。
- 数据定义语言:DDL(Data Define Language)语言,用于建立、修改数据库结构。
- 数据操作语言:DML(Data Manipulation Language)语言,供用户实现对数据的追加、删除、更新、查询操作。
- 结构化查询语言SQL
- 数据库DB
- 表table
- 行row => 记录record
- 列column => 字段field
(三)数据库系统(DBS)
数据库系统(Database System,DBS):数据库管理系统 + 数据库 + 应用程序 + 用户(DBA、应用程序员、终端用户)。
(四) 数据库的常用操作方式
一、DOS命令:
- 连接远程主机:mysql -h 主机名/IP地址 -P端口号 -u 用户名 -p 密码
- 连接本机主机:mysql -u用户名 -p密码
二、客户端(可视化软件‘Navicat’):
(五)MySQL架构
C/S架构:
服务端管理和存储数据
客户端发送操作请求
二、MySQL备份与还原
(一)mysql的备份与还原
(1)通过navicat备份和还原数据库
(2)通过mysqldump备份数据库
Mysqldump是mysql自带的逻辑备份工具,其备份形式是复制原始的数据库对象产生一组可执行的语句脚本。
备份命令mysqldump格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql
1、备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
2、同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
(3)通过备份脚本还原数据库
法一:用MYSQL 自带的mysql命令还原数据库
还原命令格式:mysql –u root –p [dbname] <bakdb.sql
说明:
- bakdb.sql为备份脚本文件名,在文件名前面可以指定路径
- 如果备份脚本包含数据库创建语句,不可加[dbname]
- 如果备份脚本不含数据库创建语句,要加[dbname],指定还原的数据库名
法二:使用source语句还原数据库
还原命令格式:mysql> source bakdb.sql;
说明
- bakdb.sql为备份脚本文件名,在文件名前面可以指定路径
- 首先要登录到mysql命令行状态,才可用source 语句还原数据库
- 如果备份脚本不包含数据库创建语句,要先创建数据库,再用use语句进入数据库,才可用source 语句还原数据库
三、MySQL 密码重置
(一)Linux系统下MySQL密码重置
第一步:修改配置文件
1.1修改配置文件
vim /etc/my.cnf
1.2 配置文件最后加上如下语句,并保存退出
skip-grant-tables
1.3 重启mysql服务: service mysqld restart
第二步:免密码登录到mysql
- mysql或者mysql -u root -p
- password直接回车
第三步:修改新密码
use mysql
update user set password=password('11223344') where user='root' #将root用户密码设置为11223344
第四步:刷新权限
flush privileges #刷新一下权限
(二)Windows系统下MySQL密码重置
https://xiaochuhe.blog.csdn.net/article/details/122286149
四、Mysql基本操作命令
(一)sql语言简介
(1)查询语言(QL)
查询语言用来对已存在的数据库中的数据按照指定的组合、条件表达式或排序进行检索。它的基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块。
(2)数据操纵语言(DML)
DML的命令用来改变数据库中的数据,它有3个基本语句:INSERT (插入) 、UPDATE(修改)、DELETE(删除)。
(3)数据定义语言(DDL)
DDL用来创建数据库中的各种对象,包括数据库模式、表、视图、索引、同义词、聚簇等,它的基本语句有:CREATE DATABASE、CREATE TABLE、CREATE VIEW、CREATE INDEX等。
(4)数据控制语言(DCL)
DCL用来授予或回收访问数据库的某种特权,控制数据操纵事务的发生时间及效果、对数据库进行监视等。数据控制基本语句有:GRANT、REVOKE、COMMIT、ROLLBACK、LOCK、UNLOCK等。
(二)sql查询语句实操
一.查询全部的列
例1、查询全部注册人员的详细记录。
SELECT * FROM user
二、选择表中的若干元组
消除取值相同的行,如果要去掉结果表中的重复行,可通过使用DISTINCT实现,DISTINCT要写在SELECT关键字的后边,其他修饰符和查询列标的前边。
例2 在充值表中查询有哪些用户进行了充值,要求列出用户的ID,去掉重复列。
SELECT distinct userid FROM recharge
三、查询满足条件的元组
查询满足条件的元组是通过WHERE子句实现的。
WHERE子句的格式为:
WHERE <查询条件> {<判定运算1>,<判定运算2>,…}
其中,判定运算其结果取值为 TRUE、FALSE 和 UNKNOWN。
判定运算的语法分类如下:
<表达式1>{=|<|<=|>|>=|<=>|<>|!=}<表达式2>
<表达式1>[NOT]LIKE<表达式2>
<表达式1>[NOT][REGEXP|RLIKE]<表达式2>
<表达式1>[NOT]BETWEEN<表达式2>AND<表达式3>
<表达式1>IS[NOT]NULL
例3、查询姓名为'Dylan'的注册人员信息
SELECT *
FROM user
WHERE name='Dylan'
例4、查询所有余额在1000元以上的注册人员姓名、余额和银行卡号。
SELECT name,Balance,AccountNumber
FROM user
WHERE Balance>=1000
四、确定范围
确定范围的谓词为:BETWEEN…AND
格式为:
列名|表达式[NOT]BETWEEN 下限值 AND 上限值
BETWEEN…AND 一般用于对数值型数据和日期型进行比较。列名或表达式的类型要与下限值或上限值的类型相同。
NOT BETWEEN … AND 含义正好相反
例5 查询余额在500-1000元之间注册人员的姓名、身份证号、余额。
SELECT name,IdCard,Balance
FROM user
WHERE Balance BETWEEN 500 and 1000等价于
SELECT name,IdCard,Balance
FROM user
WHERE Balance>=500 and Balance <=1000
五、字符串匹配
LIKE 用于查找指定列名与匹配串常量匹配的元组。
LIKE 运算符的一般形式为:
[NOT] LIKE ‘字符串’
MYSQL支持如下2种通配符:
_(下划线):匹配任意一个字符;a_b
%(百分号):匹配0个或多个字符;a%b
例6 查询名字中有‘A’的注册人员详细信息。
SELECT *
FROM user
WHERE Name like 'A%'
六、使用CASE子句对查询结果进行分析
CASE 表达式的语法格式:
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2
……
WHEN 简单表达式n THEN 结果表达式n
[ELSE 结果表达式n+1]
END
例7 查询全部注册人员的余额级别,列出姓名和银行卡号,余额级别如下定义:
当余额大于等于1000时,在结果中显示‘big’;
当余额大于等于100,小于1000时,在结果中显示‘middile’;
当余额小于100时,在结果中显示‘smile’;
select name,AccountNumber,
case
when Balance>=1000 then 'big'
when Balance>=100 and Balance<1000 then 'middile'
when Balance<100 then 'smile'
end as level
from user
七、对查询结果进行排序
可将查询结果按照某个列或某几个列的顺序进行排序,排序可以是从小到大(升序),也可以是从大到小(降序)。排序子句的格式为:
ORDER BY <列名> [DESC/ASC][,…n]
例8 查所有注册人员信息,按余额降序排序
select *
from user
order by Balance desc
八、使用聚合函数汇总数据
聚合函数也称为集合函数或计算函数,其作用是对一组值进行计算并返回一个单值。
mysql常用的聚合函数如下:
例9 查询充值总金额.
select sum(RechargeAmount)
from recharge
例10 查询注册总人数
select count(userid)
from user
例11 查询平均余额
select avg(Balance)
from user
九、多表连接查询
若一个查询涉及到两个或两个以上的表,则称之为多表连接查询。
内连接:inner join或 join
外连接:
左外连接:left outer join 或left join
右外连接:right outer join 或right join
交叉连接:cross join(相当于两表的笛卡尔积,取证一般用不到)
内连接语法如下:
SELECT <列名1,列名2 …> FROM <表名1> INNER JOIN <表名2> [ ON子句]
例12 查询有充值记录的注册人员信息及充值信息。
select *
from user inner join recharge
on user.UserId=recharge.UserId
外连接的语法格式为:
SELECT <列名1,列名2 …> FROM <表名1> LEFT|RIGHT [OUTER] JOIN <表名2> [ ON子句]
LEFT OUTER JOIN称为左外连接,RIGHT OUTER JOIN称为右外连接。左联接的含义是不管表1中的元组是否满足连接条件,均输出表1的内容;右外连接的含义是不管表2中的元组是否满足连接条件,均输出表2的内容。
例13 查询全部人员的充值信息,没充值的也要显示。
select *
from user left join recharge
on user.UserId=recharge.UserId
此查询也可以用右外连接实现:
select *
from recharge right join user
on recharge.UserId=user.UserId
十、使用limit限制结果集
使用limit的格式为:
<LIMIT> [<位置偏移量>,] <行数>
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 第一个参数“位置偏移量”指示 MySQL 从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是 0,第二条记录的位置偏移量是 1,以此类推);第二个参数“行数”指示返回的记录条数。
例14 查询余额最多的三个注册人员姓名、银行卡号、余额。
select name,AccountNumber,Balance
from user
order by Balance desc
limit 3
十一、子查询
如果一个SELECT语句是嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询;而包含子查询的语句则称之为主查询或外层查询。
含子查询的语句通常采用以下格式中的一种:
WHERE 表达式 [NOT] IN (子查询)
WHERE 表达式 比较运算符 (子查询)
例15 查询充值总额大于10000元的注册人员姓名、身份证号。
select name,IdCard
from user
where userid in
(select userid
from recharge
group by userid
having sum(RechargeAmount)>10000)
五、数据库日志及应用
(一)数据库事务
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:
原子性(Atomicity)
事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性(Isolation)
多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
持久性(Durability)
事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
(二)Mysql数据库日志
查询相关日志信息:SHOW GLOBAL VARIABLES LIKE '%log%';
错误日志 error log
默认包含服务器启动和关闭过程中的信息、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。
查询日志 general log
记录用户的所有操作,其中包含增删查改等信息
慢查询日志 slow query log
记录执行时间超过指定时间的查询语句,以便优化查询语句。
事务日志(重做:redo log,回滚:undo log,innoDB独有)
帮助提高事务的效率。
二进制日志(变更日志) bin log
记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。
(三)通过General_log日志分析数据库、表、字段
开启 general log可将所有到达MySQL Server的SQL语句记录下来。电子数据取证分析过程中可以开一会儿general log以供确定网页调用了哪些库、表、字段
先执行sql指令:show variables like‘%log%’;
可以看到默认general_log是OFF的,
(四)通过binlog日志恢复删除的数据
命令格式: mysqlbinlog 日志文件 [option] |mysql -h地址 -u用户名 -p密码 -P端口
[option]
--start-position 开始点 --stop-position 结束点
--start-date 开始时间 --stop-date 结束时间