《MySQL学习笔记》
MySQL的基本大纲:
- MySQL简介和安装
- MySQL的概述和特点
- MySQL的安装过程和配置
- 数据库基础知识
- 关系数据库概念
- 数据库、表和字段的创建
- 数据类型和约束
- 数据库设计范式
- SQL语言基础
- SQL的概述和基本语法
- 数据查询语言(SELECT语句)
- 数据操作语言(INSERT、UPDATE、DELETE语句)
- 数据定义语言(CREATE、ALTER、DROP语句)
- 数据查询高级技巧
- 使用WHERE子句进行条件过滤
- 使用多表连接(JOIN)进行数据查询
- 子查询的使用
- 聚合函数和分组查询
- 排序和限制结果
- 数据库索引和优化
- 索引的概述和使用场景
- 创建和管理索引
- SQL查询优化技巧
- 查询执行计划和性能调优
- 数据库事务和并发控制
- 事务的概念和特性
- ACID属性
- 事务的隔离级别
- 并发控制和锁机制
- 存储过程和触发器
- 存储过程的概念和用法
- 存储过程的编写和调用
- 触发器的概念和用法
- 触发器的创建和触发条件
- 数据备份和恢复
- 数据库备份的重要性
- 备份和还原工具的使用
- 数据库灾难恢复策略
- 数据库安全性和用户管理
- 数据库安全性的重要性
- 用户管理和权限控制
- 数据库角色和权限管理
1、MySQL简介和安装
1.1、简介
MySQL是一个开源的关系型数据库管理系统(RDBMS)。{二维表格,就是关系型数据库的一种体现。}
1.2、优点
- 数据存储:MySQL使用表格的形式将数据存储在数据库中,支持多种数据类型,包括整数、字符串、日期、布尔值等。
- 数据查询:MySQL提供了强大的查询功能,支持标准的SQL查询语言,可以进行复杂的数据检索和数据操作。
- 高性能:MySQL被设计为高性能的数据库系统,能够处理大量的并发操作,并且通过索引和优化技术提供快速的查询响应时间。
- 可扩展性:MySQL支持水平和垂直扩展,可以通过增加服务器的数量或增强服务器的硬件来提高数据库的处理能力和性能。
- 安全性:MySQL提供了多种安全功能和机制,包括用户认证、访问控制和数据加密等,以保护数据库的安全性和数据的机密性。
- 可靠性:MySQL采用了事务处理和数据恢复机制,确保数据的一致性和可靠性,并提供了备份和恢复功能,以应对故障和数据损坏的情况。
- 简单易用:MySQL具有用户友好的界面和简单易用的命令行工具,使开发人员和管理员能够方便地管理和操作数据库。
1.3、安装方式
windows系统
- 安装包
- 压缩包{推荐}
Linux系统
- 宝塔
- Docker
- 压缩包
1.4、常见连接不上问题
1.4.1、数据库没开启远程连接
mysql -uroot -proot
use mysql;
update user set Host='%' where User='root';
#修改后刷新权限
flush privileges;
1.4.2、防火墙没关/没授权
- Linux防火墙、安全组放行{云服务器服务商}
1.4.3、MySQL的不正确安装
重新安装即可
1.4.4、检查本地虚拟网卡
1.4.5、ping测试通不通
2、数据库基础知识
- 数据库(Database):数据库是一个组织和存储数据的集合。它提供了一种结构化的方式来存储、管理和操作数据。
- 关系型数据库(Relational Database):关系型数据库是一种基于关系模型的数据库,使用表格(表)来组织和存储数据。关系型数据库使用预定义的模式(Schema)来描述数据结构和关系。
- 表(Table):表是关系型数据库中数据的基本单位,它由行和列组成。每行代表一个记录(Record),每列代表一个属性(Field)或字段。
- 主键(Primary Key):主键是表中用于唯一标识每行数据的一列或一组列。它具有唯一性和非空性约束,并用于在表中定位特定的数据行。
- 外键(Foreign Key):外键是表中的一列,用于建立表之间的关系。外键与另一个表中的主键或唯一键相关联,用于维护表之间的引用完整性。
- 查询(Query):查询是通过使用结构化查询语言(SQL)来检索和操作数据库中的数据。查询语句允许选择特定的数据行、列和条件,执行排序、过滤和连接等操作。
- 数据完整性(Data Integrity):数据完整性是确保数据的准确性、一致性和有效性的属性。它通过约束(如主键、唯一约束、非空约束)和触发器等机制来保护数据的完整性。
- 索引(Index):索引是一种数据结构,用于提高数据库的查询性能。它可以加速数据的查找和访问,减少查询时需要扫描的数据量。
- 事务(Transaction):事务是一组数据库操作的逻辑单元,被视为一个不可分割的工作单元。事务具有原子性、一致性、隔离性和持久性(ACID)的特性,确保数据库操作的一致性和可靠性。
- 数据库管理系统(Database Management System,DBMS):数据库管理系统是用于管理和操作数据库的软件。它提供了对数据库的访问、查询、维护、备份和恢复等功能。
2.1、数据库类型
数据库类型 | 描述 |
---|---|
关系型数据库 (RDBMS) | 使用关系模型存储和管理数据,数据以表格形式组织,具备事务处理和 SQL 查询等功能。常见的关系型数据库包括MySQL、Oracle、Microsoft SQL Server、PostgreSQL 等。 |
非关系型数据库 (NoSQL) | 非关系型数据库不使用传统的表格结构,而是采用其他数据组织方式,如键值对、文档、列族、图形等。它们具有高可扩展性、灵活性和性能优势,适用于大数据和分布式环境。常见的NoSQL数据库有MongoDB、Redis、Cassandra、Neo4j等。 |
内存数据库 (In-Memory) | 内存数据库将数据存储在内存中,以提供快速的数据访问和处理。它们通常用于对性能要求极高的应用场景,如高并发的实时数据分析和缓存等。常见的内存数据库有Redis、Memcached、VoltDB等。 |
列式数据库 (Columnar) | 列式数据库将数据按列存储,而不是按行存储,以提供更高效的数据压缩、查询和分析性能。它们适用于需要高度聚合和分析大量数据的场景。常见的列式数据库有Apache HBase、Apache Cassandra、Vertica等。 |
文档数据库 (Document) | 文档数据库将数据存储为类似文档的结构,如JSON或XML格式。它们适用于存储和查询半结构化数据,支持动态的数据模型和灵活的数据表示。常见的文档数据库有MongoDB、Couchbase、Elasticsearch等。 |
图形数据库 (Graph) | 图形数据库专注于存储和处理图形数据结构,如节点和边。它们用于处理复杂的关系和网络数据,支持高效的图形查询和分析。常见的图形数据库有Neo4j、Amazon Neptune、ArangoDB等。 |
时间序列数据库 (Time Series) | 时间序列数据库专门用于存储和分析时间相关的数据,如传感器数据、日志数据、金融数据等。它们优化了时间序列数据的存储和查询效率。常见的时间序列数据库有InfluxDB、TimescaleDB、OpenTSDB等。 |
搜索引擎 (Search Engine) | 搜索引擎是专门用于全文搜索和信息检索的数据库系统。它们支持高效的文本搜索和相关性排序。常见的搜索引擎有Elasticsearch、Apache Solr等。 |
3、SQL语言基础
SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化查询语言。它提供了用于创建、查询、修改和删除数据库中的表、数据和其他对象的语法和操作。
下面是SQL语言基础的一些重要方面:
-
数据库操作:
- 创建数据库:CREATE DATABASE database_name;
create database test;
- 删除数据库:DROP DATABASE database_name;
drop database test;
- 切换数据库:USE database_name;
use test;
-
表操作:
- 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);
create table test
(
id int primary key,
name varchar(50) NOT NULL
);
- 修改表:ALTER TABLE table_name ADD column_name datatype;
alter table test add gender varchar(50);
- 删除表:DROP TABLE table_name;
drop table test;
-
数据操作:
- 插入数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
insert into test (id,name) values (1,'校长')
- 查询数据:SELECT column1, column2, ... FROM table_name WHERE condition;
select * from test;
select id ,name from test;
- 更新数据:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
update test set id=10 where id=1;
- 删除数据:DELETE FROM table_name WHERE condition;
delete from test where id=1;
-
条件和逻辑操作符:
- 等于:=
- 不等于:<>
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
- 逻辑与:AND
- 逻辑或:OR
- 逻辑非:NOT
-
聚合函数:
- 平均值:AVG(column_name)
select avg(salary) from test;
- 总和:SUM(column_name)
select sum(salary) from test;
- 最大值:MAX(column_name)
select max(age) from test;
- 最小值:MIN(column_name)
select min(age) from test;
- 计数:COUNT(column_name)
select count(*) from test;
-
排序和分组:
- 排序:ORDER BY column_name ASC/DESC
select * from test order by asc;
select * from test order by desc;
- 分组:GROUP BY column_name
select team from test group by team;
select team count(id) test group by team;
-
连接操作:
- 内连接:INNER JOIN
select * from a inner join b on a.id=b.id
- 左连接:LEFT JOIN
select * from a LEFT JOIN b on a.id=b.id
- 右连接:RIGHT JOIN
select * from a RIGHT JOIN b on a.id=b.id
4、查询高级技巧
- 别名
select name as n from a;
select * from test as t;
- 子查询
SELECT column_name FROM table_name WHERE column_name IN (SELECT column_name FROM another_table);
- 存储过程
CREATE PROCEDURE procedure_name
AS
BEGIN
-- SQL statements
END;
-
窗口函数
-
union操作
并集,两表字段数量不一样时,用null填充。
- case语句
判断
- distinct
去重
- limit
分页
5、数据库索引和优化
什么是数据库索引?
数据库索引是一种数据库结构,用于加快访问速度、以及提高查询性能。
索引作用?
- 提升查询性能
- 提供预排序
- 减少IO
常见索引类型
- 主键索引:用于唯一标识表中的记录。
- 唯一索引:确保列中的值唯一。
数据库优化策略:
- 使用适当的索引:根据查询需求创建适当的索引,以加速查询操作。选择合适的列作为索引键,并考虑多列索引和覆盖索引的使用。
- 避免全表扫描:尽量避免使用没有索引支持的查询,这样可以减少全表扫描的开销。优化查询条件和使用合适的索引可以帮助避免全表扫描。
- 优化查询语句:编写高效的查询语句,避免不必要的计算、过滤和排序。使用合适的JOIN操作、合理的条件筛选和优化排序方式。
- 数据库规范化和冗余处理:根据实际需求对数据库进行规范化设计,减少数据冗余,以提高查询和更新操作的性能。
- 分区和分表:将大型表分割成较小的分区或分表,以减少数据的访问范围,提高查询和维护的效率。
- 调整数据库缓存和缓冲区:合理配置数据库的缓存大小和缓冲区,以提高读取操作的性能,减少磁盘IO的次数。
- 定期数据库维护:定期进行数据库备份、优化和索引重建等维护操作,以保持数据库的健康状态和高性能。
6、数据库事务和并发控制
数据库事务:
- 事务是一组数据库操作,被视为一个逻辑单元,要么全部执行成功,要么全部回滚到事务开始前的状态。
- 事务通常具有以下四个属性,通常称为ACID属性:
- 原子性(Atomicity):事务中的操作被视为原子操作,要么全部执行成功,要么全部回滚,不会部分执行。
- 一致性(Consistency):事务在执行前后数据库的状态必须保持一致,满足预定义的约束和规则。
- 隔离性(Isolation):并发执行的事务之间应该互相隔离,使得每个事务感觉自己在独立地访问数据。
- 持久性(Durability):一旦事务提交,其对数据库的改变应该是永久性的,即使发生系统故障。
并发控制:
- 并发控制是为了解决多个并发执行的事务可能导致的数据不一致问题。
- 并发控制的目标是保证事务并发执行的正确性、数据的一致性和隔离性。
- 常见的并发控制技术包括锁机制、并发调度和多版本控制。
- 锁机制:通过锁定数据对象,控制事务对数据的访问,保证事务的隔离性。
- 并发调度:调度事务的执行顺序,以避免数据冲突和并发操作引起的问题。
- 多版本控制:为每个事务创建多个数据版本,从而允许并发读取操作,并提供隔离性和一致性保证。
综合使用事务和并发控制可以确保数据库操作的正确性、一致性和隔离性。事务提供了逻辑上的完整性,而并发控制保证了多个并发事务之间的正确交互。这两个概念在数据库系统中密切相关,并在实际应用中发挥重要作用。
7、存储过程和触发器
存储过程和触发器是数据库中常用的两种对象,用于执行特定的操作和响应特定的事件。
存储过程(Stored Procedure):
- 存储过程是一组预编译的SQL语句集合,作为一个单元在数据库中存储和执行。
- 存储过程通常具有输入参数和输出参数,可以接收输入值并返回处理结果。
- 存储过程可以包含条件判断、循环、异常处理等逻辑,使得复杂的业务逻辑可以在数据库中进行处理。
- 存储过程可以在需要时被调用,并可以在事务中进行操作。
- 存储过程可以提高数据库性能,减少网络传输和SQL解析的开销。
触发器(Trigger):
- 触发器是与数据库表相关联的特殊类型的存储过程,它会在特定事件发生时自动触发执行。
- 触发器可以在插入、更新或删除数据之前或之后执行逻辑操作。
- 触发器可以用于强制实施数据完整性约束、记录审计信息、触发相关的业务逻辑等。
- 触发器与特定的表相关联,当表上的操作满足触发器定义的条件时,触发器会被自动激活执行。
存储过程和触发器可以提高数据库的灵活性、可维护性和数据一致性。它们使得复杂的业务逻辑可以在数据库内部执行,减少了应用程序与数据库之间的交互和数据传输。同时,存储过程和触发器也需要谨慎使用,避免滥用和性能问题。在设计和实现存储过程和触发器时,应考虑数据库的设计原则和性能要求,确保其在特定场景下的正确应用。
8、数据备份和恢复
mysqldump -u username -p database_name > backup.sql
mysql -u username -p database_name < backup.sql
9、数据库安全性和用户管理
数据库安全性和用户管理是保护数据库中数据安全的关键方面。以下是数据库安全性和用户管理的一些重要方面:
- 访问控制:限制对数据库的访问权限,只允许授权用户进行访问。确保只有经过授权的用户可以连接到数据库服务器和执行特定操作。
- 用户身份验证:使用强密码策略,要求用户使用复杂密码,并定期更换密码。使用加密算法对用户密码进行存储,以防止密码泄露。
- 用户授权和权限管理:使用授权机制,为用户分配适当的权限,限制他们对数据库对象的操作。仅为用户授予必要的权限,以最小化潜在的安全风险。
- 审计和日志记录:启用数据库的审计功能,记录数据库操作和访问日志。定期检查日志,及时发现异常操作和安全事件。
- 数据加密:对数据库中敏感的数据进行加密,保护数据在存储和传输过程中的安全性。使用适当的加密算法和密钥管理方法。
- 防止注入攻击:使用参数化查询或预编译语句来防止SQL注入攻击。不信任外部输入数据,并对输入数据进行验证和过滤。
- 定期备份和灾难恢复:制定定期的数据备份策略,并将备份数据存储在安全的位置。测试和验证备份的可用性,并准备恢复数据库的应急计划。
- 更新和安全补丁:及时安装数据库管理系统的安全补丁和更新,以修复已知的安全漏洞和强化系统安全性。
- 强制访问控制策略:使用数据库管理系统提供的强制访问控制(MAC)或标签安全策略,为敏感数据和操作实施更严格的安全控制。
- 培训和意识提高:对数据库管理员和用户进行安全培训,提高他们的安全意识,教育他们遵守安全最佳实践。