关系型数据库(1)----MySQL(初阶)

目录

1.mysql

2.mysqld

3.mysql架构

1.连接层

2.核心服务层

3.存储引擎层

4.数据存储层

4.SQL分类

5.MySQL操作库

6.MySQL数据类型

1. 数值类型

2. 日期和时间类型

3. 字符串类型

4. 空间类型

5. JSON数据类型

7.MySQL表的约束

1. 主键约束(PRIMARY KEY)

2. 非空约束(NOT NULL)

3. 唯一约束(UNIQUE)

4. 默认值约束(DEFAULT)

5. 外键约束(FOREIGN KEY)

6. 检查约束(CHECK)

7. 自增约束(AUTO_INCREMENT)

8.MySQL基本查询

1. 基础查询

1.1 选择所有数据

1.2 选择特定列

1.3 带条件的查询

1.4 排序查询结果

1.5 限制查询结果的数量

2. 高级查询

2.1 去重查询

2.2 模糊查询

2.3 逻辑运算符

2.4 聚合函数

2.5 分组查询

2.6 多表查询

3. 实例

9.MySQL内置函数

1. 数学函数

2. 字符串函数

3. 日期和时间函数

4. 聚合函数

5. 其他函数

10.MySQL复合查询

1. 复合查询

2. 表的内外链接

11.MySQL索引

1. 索引概述

2. 索引类型

3. 索引的创建与维护

4. 索引优化

12.MySQL事务

1. 事务概述

2. 事务的启动与提交

3. 事务的隔离级别

4. 保存点(Savepoint)

5. 锁机制

6. 事务日志

7. 分布式事务

13.MySQL视图

1. 视图概述

2. 创建视图

3. 查询视图

4. 更新视图

5. 修改视图

6. 删除视图

7. 视图的优点

8. 视图的缺点

9. 视图的类型

14.MySQL用户管理

1. 创建用户

2. 授权

3. 修改用户权限

4. 修改用户密码

5. 删除用户

6. 查看用户权限

7. 用户管理最佳实践

15.MySQL连接池

1. 连接池的概念

2. 连接池的优势

3. 连接池的实现方式

4. 连接池的配置参数

5. 连接池的使用场景

6. 连接池的注意事项


1.mysql

        MySQL 是一种开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,目前由 Oracle 公司维护。它是全球最受欢迎的数据库之一,被广泛应用于 Web 应用程序、企业应用程序和移动应用程序等领域

  • 开源免费:MySQL 是开源的,可以免费使用,对于个人和小型企业来说非常有吸引力。
  • 高可靠性:具备自动故障转移和数据恢复功能,确保数据的安全性和完整性。
  • 高性能:能够处理大量数据和高并发访问请求,支持多线程操作和多用户并发访问。
  • 简单易用:安装、配置和使用都非常简单,适合初学者。
  • 可扩展性:可以通过添加插件、扩展模块和自定义函数等方式进行扩展。
  • 跨平台支持:支持多种操作系统,包括 Linux、Windows、macOS 等。
  • 多编程语言支持:支持 Java、PHP、Python 等多种编程语言,方便集成到不同的应用程序中。

2.mysqld

        mysqld 也称为 MySQL 服务器,是 MySQL 安装中的主要程序。它是一个单一的多线程程序,负责管理对 MySQL 数据目录的访问,该目录包含数据库和表。此外,mysqld 还管理日志文件和状态文件等其他信息。

  • 功能角色

    • MySQL:通常指的是整个 MySQL 数据库管理系统,包括服务器端和客户端工具。
    • mysqld:特指 MySQL 的服务器端程序,负责处理数据库的读写请求,管理数据存储和访问。
  • 程序类型

    • MySQL:包括多种工具和应用程序,例如 mysql(命令行客户端工具),mysqladmin(管理工具)等。
    • mysqld:是 MySQL 服务器的守护进程,后台运行,不产生额外的进程。
  • 启动方式

    • MySQL:通过不同的命令行工具和客户端程序与服务器进行交互。
    • mysqld:通过 mysqld 命令启动 MySQL 服务。在 Linux 系统中,可以使用 sudo /etc/init.d/mysql start 命令启动服务;在 Windows 系统中,可以使用 net start mysql 命令启动服务。
  • 交互方式

    • MySQL:用户可以通过 mysql 命令行工具连接到 MySQL 服务器并执行 SQL 命令。
    • mysqld:作为服务器端程序,不直接与用户交互,而是响应客户端的连接请求和管理数据库访问。

3.mysql架构

1.连接层

        连接层是 MySQL 架构的最上层,负责处理客户端与 MySQL 服务器的连接。这一层主要包括以下组件:

  • 连接器(Connectors):不同语言(如 PHP、Java、Python 等)通过连接器与 MySQL 进行交互。连接器负责建立和管理客户端与 MySQL 服务器之间的连接,并进行身份验证和安全检查。

2.核心服务层

        核心服务层是 MySQL 的中间层,包含了 MySQL 大部分的核心功能。这一层主要分为以下几个部分:

  • 查询缓存(Query Cache):在解析 SQL 语句之前,MySQL 会检查查询缓存中是否已有该查询的结果。如果有,则直接返回结果,无需再次执行查询。
  • 分析器(Parser):分析器负责解析 SQL 语句,将其分解为 MySQL 可以理解的逻辑结构。分析过程中会检查 SQL 语句的语法是否正确。
  • 优化器(Optimizer):优化器对 SQL 语句进行优化,选择最有效的执行计划。优化器会考虑多种执行策略,并选择成本最低的方案。
  • 执行器(Executor):执行器根据优化器生成的执行计划执行 SQL 语句。执行器会调用存储引擎 API 来访问数据。
  • 管理服务和工具(Management Services & Utilities):包括系统管理和控制工具,例如备份恢复、MySQL 复制、集群管理等。
  • SQL 接口(SQL Interface):提供 SQL 命令的接口,包括内置函数(日期、时间、数学和加密函数等)和跨存储引擎的功能(如存储过程、触发器、视图等)。

3.存储引擎层

        存储引擎层是 MySQL 的底层,负责数据的存储和提取。MySQL 支持多种存储引擎,每种引擎都有其独特的优势和劣势。常见的存储引擎包括:

  • InnoDB:支持事务处理、行级锁定和外键约束,是 MySQL 5.5 之后默认的存储引擎。
  • MyISAM:不支持事务处理和行级锁定,但读取速度快,适合读多写少的场景。
  • Memory:将数据存储在内存中,访问速度快,但数据易丢失。

4.数据存储层

        数据存储层负责将数据持久化存储在文件系统上,并与存储引擎进行交互。这一层主要包括各种日志文件、数据文件和索引文件。

4.SQL分类

  1. 数据查询语言(DQL - Data Query Language)

    • 主要用于查询数据库中的数据。
    • 常用的DQL命令包括SELECT
  2. 数据操纵语言(DML - Data Manipulation Language)

    • 主要用于对数据库中的数据进行操作,如插入、更新和删除。
    • 常用的DML命令包括INSERTUPDATEDELETE
  3. 数据定义语言(DDL - Data Definition Language)

    • 主要用于定义数据库的结构,如创建、修改和删除数据库中的表、索引等。
    • 常用的DDL命令包括CREATEALTERDROP
  4. 数据控制语言(DCL - Data Control Language)

    • 主要用于控制不同数据对象之间的访问权限。
    • 常用的DCL命令包括GRANTREVOKE
  5. 事务控制语言(TCL - Transaction Control Language)

    • 主要用于处理数据库中的事务,确保数据的完整性和一致性。
    • 常用的TCL命令包括COMMITROLLBACKSAVEPOINT
  6. 会话控制语言(SCL - Session Control Language)

    • 主要用于设置会话级别的参数,如设置字符集、时区等。
    • 常用的SCL命令包括SET
  7. 指针控制语言(PCL - Pointer Control Language)

    • 主要用于控制游标(cursor)的操作,如打开、关闭、移动游标等。
    • 常用的PCL命令包括DECLARE CURSOROPENFETCHCLOSE
  8. 元数据定义语言(MDL - Metadata Definition Language)

    • 主要用于定义数据库的元数据,如创建、修改和删除数据库中的视图、存储过程等。
    • 常用的MDL命令包括CREATE VIEWALTER VIEWDROP VIEW

5.MySQL操作库

  1. 创建数据库

    • 命令:CREATE DATABASE 数据库名;
    • 示例:CREATE DATABASE mydatabase;
  2. 删除数据库

    • 命令:DROP DATABASE 数据库名;
    • 示例:DROP DATABASE mydatabase;
  3. 修改数据库

    • 修改数据库的字符集和排序规则:ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 编码格式 DEFAULT COLLATE 排序规则;
    • 示例:ALTER DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
  4. 查看数据库

    • 查看当前服务器上的所有数据库:SHOW DATABASES; 或 SHOW SCHEMAS;
    • 选择某个数据库:USE 数据库名;
  5. 其他操作

    • 修改数据库的存储引擎:ALTER DATABASE 数据库名 ENGINE = 存储引擎名;
    • 示例:ALTER DATABASE mydatabase ENGINE = InnoDB;

6.MySQL数据类型

1. 数值类型

MySQL支持所有标准SQL数值数据类型,包括严格数值数据类型和近似数值数据类型:

  • 严格数值数据类型

    • INTEGER:有符号范围从-2^31到2^31-1,无符号范围从0到2^32-1。
    • SMALLINT:有符号范围从-2^15到2^15-1,无符号范围从0到2^16-1。
    • MEDIUMINT:有符号范围从-2^23到2^23-1,无符号范围从0到2^24-1。
    • BIGINT:有符号范围从-2^63到2^63-1,无符号范围从0到2^64-1。
    • DECIMAL 和 NUMERIC:用于存储精确的小数值。
  • 近似数值数据类型

    • FLOAT:单精度浮点数。
    • DOUBLE:双精度浮点数。
  • 其他数值类型

    • TINYINT:有符号范围从-128到127,无符号范围从0到255。
    • BIT:用于存储位字段值。

2. 日期和时间类型

表示时间值的日期和时间类型包括:

  • DATE:存储日期,格式为YYYY-MM-DD。
  • TIME:存储时间,格式为HH:MM:SS。
  • DATETIME:存储日期和时间,格式为YYYY-MM-DD HH:MM:SS。
  • TIMESTAMP:存储时间戳,格式为YYYY-MM-DD HH:MM:SS。
  • YEAR:存储年份,格式为YYYY。

3. 字符串类型

字符串类型包括:

  • CHAR:定长字符串。
  • VARCHAR:变长字符串。
  • BINARY:定长二进制字符串。
  • VARBINARY:变长二进制字符串。
  • BLOB:二进制大对象。
  • TEXT:文本大对象。
  • ENUM:枚举类型,只能有一个值,从定义的列表中选择。
  • SET:集合类型,可以包含多个值,从定义的列表中选择。

4. 空间类型

用于存储空间数据:

  • GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

5. JSON数据类型

用于存储JSON文档。

7.MySQL表的约束

        MySQL中的表约束用于限制和规范表中数据的完整性。这些约束确保了数据的准确性和可靠性。MySQL支持的表约束主要包括以下几种:

1. 主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每条记录。一个表只能有一个主键,并且主键中的列不能包含NULL值。

2. 非空约束(NOT NULL)

非空约束确保列中不能有NULL值,即该列必须包含一个值。

3. 唯一约束(UNIQUE)

唯一约束确保列中的所有值都是唯一的。一个表可以有多个唯一约束。

4. 默认值约束(DEFAULT)

默认值约束为列提供一个默认值,当插入数据时,如果没有为该列提供值,则使用默认值。

5. 外键约束(FOREIGN KEY)

外键约束用于建立和维护两个表之间的关联。外键约束要求外键列的值必须在被引用的表中存在。

6. 检查约束(CHECK)

检查约束用于确保列中的值满足特定的条件。MySQL 8.0.16开始支持检查约束。

7. 自增约束(AUTO_INCREMENT)

自增约束用于为整数类型的列自动生成唯一的递增值。通常与主键约束一起使用。

8.MySQL基本查询

1. 基础查询

1.1 选择所有数据

SELECT * FROM 表名;

例如:

SELECT * FROM users;

1.2 选择特定列

SELECT 列名1, 列名2 FROM 表名;

例如:

SELECT username, email FROM users;

1.3 带条件的查询

SELECT * FROM 表名 WHERE 条件;

例如:

SELECT * FROM users WHERE isactive = TRUE;

1.4 排序查询结果

SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC];

例如:

SELECT * FROM users ORDER BY birthdate DESC;

1.5 限制查询结果的数量

SELECT * FROM 表名 LIMIT 数量;

例如:

SELECT * FROM users LIMIT 10;

2. 高级查询

2.1 去重查询

SELECT DISTINCT 列名 FROM 表名;

例如:

SELECT DISTINCT name FROM students;

2.2 模糊查询

SELECT * FROM 表名 WHERE 列名 LIKE '模糊字符串';

例如:

SELECT * FROM students WHERE name LIKE '%张%';

2.3 逻辑运算符

SELECT * FROM 表名 WHERE 条件1 AND/OR 条件2;

例如:

SELECT * FROM students WHERE age > 15 OR sex = 'man';

2.4 聚合函数

SELECT 聚合函数(列名) FROM 表名;

例如:

SELECT COUNT(*) FROM students;

2.5 分组查询

SELECT 列名1, 聚合函数(列名2) FROM 表名 GROUP BY 列名1;

例如:

SELECT sex, COUNT(*) FROM students GROUP BY sex;

2.6 多表查询

SELECT 列名1, 列名2 FROM 表名1, 表名2 WHERE 条件;

例如:

SELECT users.username, orders.order_date FROM users, orders WHERE users.id = orders.user_id;

3. 实例

以下是一些具体的实例:

  • 选择所有列的所有行:

    SELECT * FROM users;
    
  • 选择特定列的所有行:

    SELECT username, email FROM users;
    
  • 添加 WHERE 子句,选择满足条件的行:

    SELECT * FROM users WHERE isactive = TRUE;
    
  • 添加 ORDER BY 子句,按照某列的升序排序:

    SELECT * FROM users ORDER BY birthdate;
    
  • 添加 ORDER BY 子句,按照某列的降序排序:

    SELECT * FROM users ORDER BY birthdate DESC;
    
  • 添加 LIMIT 子句,限制返回的行数:

    SELECT * FROM users LIMIT 10;
    
  • 使用 AND 运算符和通配符:

    SELECT * FROM users WHERE username LIKE 'j%' AND isactive = TRUE;
    
  • 使用 OR 运算符:

    SELECT * FROM users WHERE isactive = TRUE OR birthdate < '1990-01-01';

9.MySQL内置函数

1. 数学函数

  • ABS(x): 返回x的绝对值。
    SELECT ABS(-1); -- 返回 1
    
  • CEIL(x): 返回大于或等于x的最小整数。
    SELECT CEIL(1.2); -- 返回 2
    
  • FLOOR(x): 返回小于或等于x的最大整数。
    SELECT FLOOR(1.2); -- 返回 1
    
  • ROUND(x, [y]): 返回x的四舍五入值,y指定小数点后的位数。
    SELECT ROUND(1.234, 2); -- 返回 1.23
    

2. 字符串函数

  • CONCAT(str1, str2, …): 将字符串连接起来。
    SELECT CONCAT('Hello', ' ', 'World'); -- 返回 'Hello World'
    
  • LEFT(str, x): 返回字符串str的最左边x个字符。
    SELECT LEFT('Hello World', 5); -- 返回 'Hello'
    
  • RIGHT(str, x): 返回字符串str的最右边x个字符。
    SELECT RIGHT('Hello World', 5); -- 返回 'World'
    
  • SUBSTRING(str, x, y): 返回字符串str中从第x个字符开始的y个字符。
    SELECT SUBSTRING('Hello World', 7, 5); -- 返回 'World'
    

3. 日期和时间函数

  • CURRENT_DATE: 返回当前日期。
    SELECT CURRENT_DATE; -- 返回 '2024-10-25'
    
  • CURRENT_TIME: 返回当前时间。
    SELECT CURRENT_TIME; -- 返回 '14:45:00'
    
  • CURRENT_TIMESTAMP: 返回当前日期和时间。
    SELECT CURRENT_TIMESTAMP; -- 返回 '2024-10-25 14:45:00'
    
  • DATE_ADD(date, INTERVAL x [unit]): 向日期date添加指定的时间间隔。
    SELECT DATE_ADD('2024-10-25', INTERVAL 1 DAY); -- 返回 '2024-10-26'
    

4. 聚合函数

  • COUNT(x): 返回x的非NULL值的数量。
    SELECT COUNT(*) FROM users;
    
  • SUM(x): 返回x的总和。
    SELECT SUM(age) FROM users;
    
  • AVG(x): 返回x的平均值。
    SELECT AVG(age) FROM users;
    
  • MAX(x): 返回x的最大值。
    SELECT MAX(age) FROM users;
    
  • MIN(x): 返回x的最小值。
    SELECT MIN(age) FROM users;

5. 其他函数

  • IF(condition, true_value, false_value): 如果条件为真,返回true_value,否则返回false_value。
    SELECT IF(1 > 0, 'TRUE', 'FALSE'); -- 返回 'TRUE'
    
  • CASE: 根据条件返回不同的值。
    SELECT CASEWHEN age > 30 THEN 'Old'WHEN age BETWEEN 20 AND 30 THEN 'Middle'ELSE 'Young'
    END AS age_group FROM users;

10.MySQL复合查询

1. 复合查询

复合查询通常包括以下几种类型:

  • UNION: 合并两个或多个SELECT语句的结果集,并去除重复的行。

    SELECT column_name(s) FROM table1
    UNION
    SELECT column_name(s) FROM table2;
    

    注意: UNION默认会去除重复的行。如果需要保留重复的行,可以使用UNION ALL。

  • UNION ALL: 合并两个或多个SELECT语句的结果集,并保留重复的行。

    SELECT column_name(s) FROM table1
    UNION ALL
    SELECT column_name(s) FROM table2;
    
  • INTERSECT: 返回两个SELECT语句结果集的交集。

    SELECT column_name(s) FROM table1
    INTERSECT
    SELECT column_name(s) FROM table2;
    
  • MINUS (或 EXCEPT): 返回第一个SELECT语句结果集中存在而第二个SELECT语句结果集中不存在的行。

    SELECT column_name(s) FROM table1
    MINUS
    SELECT column_name(s) FROM table2;
    

2. 表的内外链接

表的内外链接用于连接多个表,并根据连接条件返回结果。以下是几种常见的连接类型:

  • INNER JOIN: 返回两个表中的匹配行。

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
    ON table1.column_name = table2.column_name;
    
  • LEFT JOIN (或 LEFT OUTER JOIN): 返回左表中的所有行,即使在右表中没有匹配的行。

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    ON table1.column_name = table2.column_name;
    
  • RIGHT JOIN (或 RIGHT OUTER JOIN): 返回右表中的所有行,即使在左表中没有匹配的行。

    SELECT column_name(s)
    FROM table1
    RIGHT JOIN table2
    ON table1.column_name = table2.column_name;
    
  • FULL JOIN (或 FULL OUTER JOIN): 返回两个表中的所有行,即使没有匹配的行。

    SELECT column_name(s)
    FROM table1
    FULL JOIN table2
    ON table1.column_name = table2.column_name;
    
  • CROSS JOIN: 返回两个表中的所有可能的组合。

    SELECT column_name(s)
    FROM table1
    CROSS JOIN table2;
    
  • NATURAL JOIN: 基于两个表中的相同名称和类型的列进行连接。

    SELECT column_name(s)
    FROM table1
    NATURAL JOIN table2;

11.MySQL索引

1. 索引概述

        索引是一个排序的列表,存储着索引的值和包含该值的数据所在行的物理地址。索引的作用类似于书的目录,可以根据目录中的页码快速找到所需内容。在MySQL中,索引通常以B-Tree结构存储,能够保持数据有序,从而加快查询速度12。

2. 索引类型

MySQL支持多种索引类型,每种类型都有其适用场景:

  • 主键索引(PRIMARY KEY):当某个列被设为主键时,该列就是主键索引。主键索引保证列中的数据唯一且非空。

    CREATE TABLE a (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL DEFAULT ''
    );
    
  • 唯一索引(UNIQUE INDEX):索引列中的值必须是唯一的,但允许NULL值。

    CREATE UNIQUE INDEX 索引名 ON table_name(column_name);
    
  • 普通索引(NORMAL INDEX):没有任何限制,允许在定义索引的列中插入重复值和NULL值。

    CREATE INDEX 索引名 ON table_name(column_name);
    
  • 全文索引(FULLTEXT INDEX):主要用于快速检索大文本数据中的关键字信息。

    CREATE FULLTEXT INDEX 索引名 ON table_name(column_name);
    
  • 前缀索引:在文本类型如BLOB、TEXT或很长的VARCHAR列上创建索引时,可以使用前缀索引,数据量相比普通索引更小。

    CREATE INDEX 索引名 ON table_name(column_name(length));
    
  • 组合索引:在多个字段上创建的索引,查询条件中使用了创建索引时的第一个字段时,索引才会被使用。

    CREATE INDEX 索引名 ON table_name(column1, column2);
    
  • 空间索引:MySQL在5.7之后的版本支持了空间索引,支持OpenGIS几何数据模型。

    CREATE SPATIAL INDEX 索引名 ON table_name(column_name);
    

3. 索引的创建与维护

        创建索引可以在建表时同步进行,也可以后续手动创建。索引的更新可以通过重命名或删除旧索引实现,删除索引使用DROP INDEX语句34。

4. 索引优化

索引优化是提升数据库性能的重要手段。以下是一些索引优化的最佳实践:

  • 选择合适的索引类型:根据查询需求选择最合适的索引类型,如B-Tree、Hash、Fulltext等。

  • 避免过度索引:过多的索引会占用额外的磁盘空间,并增加维护成本。

  • 使用EXPLAIN分析查询:通过EXPLAIN命令分析SQL语句的执行计划和性能,优化查询语句。

    EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';
    
  • 索引列的选择:选择经常用于查询条件的列创建索引,以提高查询效率

12.MySQL事务

        MySQL事务是数据库操作中非常重要的一部分,它确保了数据的一致性和完整性。以下是对MySQL事务的详细介绍:

1. 事务概述

事务是一组操作的集合,这些操作要么全部执行成功,要么全部失败。事务具有以下四个特性(ACID):

  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个环节。
  • 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态。
  • 隔离性(Isolation):一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就是永久性的,即便在系统发生故障的情况下也不会丢失。

2. 事务的启动与提交

在MySQL中,事务的启动和提交可以通过以下命令实现:

  • 启动事务:默认情况下,MySQL的每个语句都是自动提交的。要启动一个事务,可以使用START TRANSACTIONBEGIN命令。

    START TRANSACTION;
    -- 或者
    BEGIN;
    
  • 提交事务:当事务中的所有操作都成功完成后,使用COMMIT命令提交事务,使更改永久生效。

    COMMIT;
    
  • 回滚事务:如果在事务执行过程中出现错误,可以使用ROLLBACK命令回滚事务,撤销所有未提交的更改。

    ROLLBACK;
    

3. 事务的隔离级别

        MySQL支持多种事务隔离级别,不同的隔离级别会影响事务的并发性能和数据一致性。隔离级别包括:

  • 读未提交(READ UNCOMMITTED):允许读取未提交的数据,可能会导致脏读、不可重复读和幻读。
  • 读已提交(READ COMMITTED):只能读取已提交的数据,可以避免脏读,但可能会出现不可重复读和幻读。
  • 可重复读(REPEATABLE READ):在一个事务中多次读取同一记录,结果都是相同的,可以避免脏读和不可重复读,但可能会出现幻读。
  • 串行化(SERIALIZABLE):事务串行执行,可以避免脏读、不可重复读和幻读,但并发性能最低。

在MySQL中,可以通过以下命令设置事务的隔离级别:

SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;

4. 保存点(Savepoint)

        保存点允许在事务中设置一个标记,如果事务需要回滚,可以回滚到指定的保存点,而不是整个事务。使用SAVEPOINT命令设置保存点,使用ROLLBACK TO SAVEPOINT命令回滚到保存点。

5. 锁机制

        MySQL中的事务通过锁机制来保证数据的一致性和隔离性。锁分为共享锁(读锁)和排他锁(写锁),不同的锁类型和锁粒度(行锁、表锁)会影响事务的并发性能。

6. 事务日志

        事务日志记录了事务对数据库的修改,用于事务的回滚和恢复。MySQL支持两种事务日志:二进制日志(Binary Log)和InnoDB事务日志。

7. 分布式事务

        在分布式数据库系统中,分布式事务确保了跨多个节点的事务的一致性。MySQL支持分布式事务,但需要使用特定的分布式事务管理器。

13.MySQL视图

        MySQL视图(View)是一个虚拟表,其内容是从一个或多个表中派生出来的。视图可以包含表中的全部或部分数据,并且可以根据需要显示或隐藏数据。视图不存储数据,其数据仍然存储在原始表中。以下是关于MySQL视图的详细介绍:

1. 视图概述

        视图是数据库中的一个重要对象,主要用于简化数据查询、提供数据安全性、集中数据管理和简化数据操作。视图可以基于一个表,也可以基于多个表。

2. 创建视图

在MySQL中,可以使用CREATE VIEW语句创建视图。基本语法如下:

CREATE VIEW 视图名称 AS 查询语句;

例如,创建一个基于employees表的视图,只包含员工姓名和部门:

CREATE VIEW employee_details AS
SELECT name, department
FROM employees;

3. 查询视图

创建视图后,可以使用SELECT语句查询视图,就像查询普通表一样:

SELECT * FROM employee_details;

4. 更新视图

        在MySQL中,可以通过UPDATEINSERTDELETE语句更新视图中的数据。但是,更新视图有一些限制,例如,如果视图是基于多个表创建的,或者包含聚合函数、子查询等,则可能无法更新视图。

5. 修改视图

可以使用ALTER VIEW语句修改视图的定义:

ALTER VIEW 视图名称 AS 查询语句;

6. 删除视图

使用DROP VIEW语句删除视图:

DROP VIEW 视图名称;

7. 视图的优点

  • 简化数据查询:视图可以简化复杂的查询语句,使数据查询更易于理解和使用。
  • 提供数据安全性:视图可以限制用户对数据的访问,只显示特定的数据列或行。
  • 集中数据管理:视图可以将多个表中的数据集中到一个视图中,方便数据管理和维护。
  • 简化数据操作:视图可以简化数据操作,例如,通过视图可以方便地对多个表进行联合查询。

8. 视图的缺点

  • 性能影响:视图不存储数据,每次查询视图时都需要执行视图定义的查询语句,可能会影响查询性能。
  • 更新限制:更新视图有一些限制,可能无法更新所有类型的视图。

9. 视图的类型

  • 简单视图:基于单个表的视图。
  • 复杂视图:基于多个表或包含聚合函数、子查询等复杂查询的视图。

14.MySQL用户管理

1. 创建用户

在MySQL中,可以使用CREATE USER语句创建新用户。基本语法如下:

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

例如,创建一个名为user1的用户,密码为password,只能从本地主机登录:

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';

2. 授权

创建用户后,需要为用户授权。可以使用GRANT语句为用户授予权限。基本语法如下:

GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机名';

例如,为user1用户授予权限,使其可以查询employees表:

GRANT SELECT ON mydatabase.employees TO 'user1'@'localhost';

3. 修改用户权限

可以使用GRANT语句修改用户的权限,或者使用REVOKE语句撤销用户的权限。例如,撤销user1用户的查询权限:

REVOKE SELECT ON mydatabase.employees FROM 'user1'@'localhost';

4. 修改用户密码

可以使用ALTER USER语句修改用户的密码。基本语法如下:

ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';

例如,修改user1用户的密码为newpassword

ALTER USER 'user1'@'localhost' IDENTIFIED BY 'newpassword';

5. 删除用户

可以使用DROP USER语句删除用户。基本语法如下:

DROP USER '用户名'@'主机名';

例如,删除user1用户:

DROP USER 'user1'@'localhost';

6. 查看用户权限

可以使用SHOW GRANTS语句查看用户的权限。基本语法如下:

SHOW GRANTS FOR '用户名'@'主机名';

例如,查看user1用户的权限:

SHOW GRANTS FOR 'user1'@'localhost';

7. 用户管理最佳实践

  • 最小权限原则:只为用户授予必要的权限,避免授予过多的权限。
  • 定期审查权限:定期审查用户的权限,确保权限设置合理。
  • 使用强密码:为用户设置强密码,并定期更换密码。
  • 限制登录主机:限制用户只能从特定的主机登录数据库。

15.MySQL连接池

        MySQL连接池是一种数据库连接管理技术,它通过预先创建和复用数据库连接来减少连接建立和销毁的开销。连接池可以提高数据库操作的性能和效率,特别是在高并发环境下。以下是MySQL连接池的详细介绍:

1. 连接池的概念

        连接池是一种管理数据库连接的机制,它允许应用程序在需要时从池中获取连接,并在使用完毕后释放回池中。这样可以避免频繁地创建和销毁连接,从而提高性能。

2. 连接池的优势

  • 性能提升:通过复用连接,减少了连接建立和销毁的开销。
  • 资源节约:减少了数据库服务器的连接数,降低了资源消耗。
  • 并发处理:能够处理高并发请求,提高应用程序的响应速度。

3. 连接池的实现方式

连接池的实现方式有多种,常见的有:

  • 内置连接池:如MySQL Connector/J(Java)、MySQL Connector/C++等。
  • 第三方连接池:如Apache DBCP、C3P0、HikariCP等。
  • 自定义连接池:根据特定需求自行实现。

4. 连接池的配置参数

连接池的配置参数通常包括:

  • 最大连接数:连接池中允许的最大连接数。
  • 最小连接数:连接池中保持的最小连接数。
  • 连接超时时间:获取连接的超时时间。
  • 空闲连接回收时间:回收空闲连接的时间间隔。
  • 连接验证:验证连接是否有效的策略。

5. 连接池的使用场景

连接池适用于以下场景:

  • 高并发应用:如Web应用、移动应用等。
  • 频繁数据库操作:如OLTP(联机事务处理)系统。
  • 资源受限环境:如云数据库、共享数据库等。

6. 连接池的注意事项

  • 连接泄露:确保所有连接在使用后都能正确释放。
  • 连接池大小:合理配置连接池大小,避免过大或过小。
  • 连接验证:定期验证连接的有效性,避免无效连接。
  • 异常处理:妥善处理数据库操作中可能出现的异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++对象模型:关于对象

C语言和C对比 ⭐ 关联知识点&#xff1a;C和C语言区别 &#xff08;1&#xff09;C 语言的特点 简洁与高效&#xff1a;C 语言被设计为一种系统级的编程语言&#xff0c;它提供了对硬件的直接访问能力&#xff0c;并且编译后的代码通常非常紧凑&#xff0c;运行效率高。 全…

Java SnakeYaml 反序列化漏洞原理

目录 SnakeYaml 使用 SnakeYAML 序列化与反序列化 SnakeYAML 序列化实现 SnakeYAML 反序列化实现 SnakeYaml 反序列化漏洞 基于 ScriptEngineManager 利用链 漏洞原因分析 SPI 服务提供者发现机制 命令执行 漏洞修复 SnakeYaml SnakeYAML 是一个用于 Java 语言的 YA…

面试题:JVM(一)

1. JVM概述 1.1 JVM的生命周期 说说Java虚拟机的生命周期&#xff08;阿里&#xff09; 虚拟机的启动 Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的&#xff0c;这个类是由虚拟机的具体实现指定的。 虚拟机的退出有如下…

接口测试(九)jmeter——关联(JSON提取器)

一、JSON提取器介绍 要检查的响应字段&#xff1a;样本数据源引用名称&#xff1a;可自定义设置引用方法&#xff1a;${引用变量名}匹配数字 匹配数字含义-1表示全部0随机1第一个2第二个…以此类推 缺省值&#xff1a;匹配失败时的默认值ERROR&#xff0c;可以不写 二、js…

2024年双十一有什么好物推荐?盘点2024双十一爆款好物分享

第一款&#xff1a;希亦ACE内衣洗衣机 一句话点评&#xff1a;常出口欧美等多个国家&#xff0c;被超百家专业媒体评为“洗护一体技术之王”&#xff0c;妇科细菌除菌率达99.99%&#xff0c;清洁度高达99.8%&#xff01; CEYEE希亦是清洁领域的实力大牌子了&#xff0c;也是母…

老照片如何修复变清晰?手把手教你4种模糊照片变清晰方法!

在洋溢着温情的生日聚会上&#xff0c;家人们围坐一堂&#xff0c;总会情不自禁地翻阅那些尘封已久的老照片&#xff0c;一同沉醉于往昔的温情岁月。然而&#xff0c;时光荏苒&#xff0c;许多承载着深情厚意的照片已变得泛黄、模糊&#xff0c;难以再现昔日的清晰与鲜活。但请…

vue2 a-input输入框使用正则限制为数字、英文及中文,出现吞字符和英文字符打断问题

需求是输入框限制数字、英文和中文&#xff0c;原始使用的正则是&#xff1a; replace(/[^a-zA-Z0-9\u4E00-\u9FA5]/g,)1、使用这个正则表达式使用搜狗输入法没问题&#xff0c;使用微软自带输入法后会存在输入英文会吞并当前光标前的字符&#xff0c;也有英文打断问题。 输入…

2024年【制冷与空调设备安装修理】考试及制冷与空调设备安装修理最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试参考答案及制冷与空调设备安装修理考试试题解析是安全生产模拟考试一点通题库老师及制冷与空调设备安装修理操作证已考过的学员汇总&#xff0c;相对有效帮助制冷与空调设备安装修理最新解…

线上遇到的问题记录(说多了都是泪)

写在前面 我觉得&#xff0c;工作中最有价值的就是及遇到的问题了&#xff0c;特别时线上这种容易让人血压升高的环境中遇到的问题&#xff0c;本文就是记录这些血压升高时刻。 如果你遇到什么真实环境的问题&#xff0c;也欢迎评论或者私信分享给我&#xff01;&#xff01;&…

Angular 保姆级别教程高阶应用 - RxJs

RxJS 13.1.1 什么是 RxJS ? RxJS 是一个用于处理异步编程的 JavaScript 库&#xff0c;目标是使编写异步和基于回调的代码更容易。 13.1.2 为什么要学习 RxJS ? 就像 Angular 深度集成 TypeScript 一样&#xff0c;Angular 也深度集成了 RxJS。 服务、表单、事件、全局状…

经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法)

经典功率谱估计的原理及MATLAB仿真&#xff08;自相关函数BT法、周期图法、bartlett法、welch法&#xff09; 文章目录 前言一、BT法二、周期图法三、Bartlett法四、welch法五、MATLAB仿真六、MATLAB详细代码总结 前言 经典功率谱估计方法包括BT法&#xff08;对自相关函数求傅…

基于Java的就业信息管理系统源码带本地搭建教程

技术框架&#xff1a;jQuery MySQL5.7 mybatis shiro Layui HTML CSs JS 运行环境&#xff1a;jdk8 IntelliJ IDEA maven3 宝塔面板 实现了就业信息管理、就业统计、用户管理等功能。有普通用户和管理员两种角色。

开源限流组件分析(三):golang-time/rate

文章目录 本系列前言提供获取令牌的API数据结构基础方法tokensFromDurationdurationFromTokensadvance 获取令牌方法reverseN其他系列API 令人费解的CancelAt是bug吗 取消后无法唤醒其他请求 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit开源…

智能AI监测系统燃气安全改造方案的背景及应用价值

随着燃气行业的迅速发展和城市化进程的加快&#xff0c;燃气安全管理成为企业运营和城市管理中不可忽视的关键领域。燃气泄漏、管道破损等事故的发生不仅会造成严重的经济损失&#xff0c;还威胁到人民生命财产安全。传统的安全管理方法往往依赖人工巡检和手动监测&#xff0c;…

如何写一个视频编码器演示篇

先前写过《视频编码原理简介》&#xff0c;有朋友问光代码和文字不太真切&#xff0c;能否补充几张图片&#xff0c;今天我们演示一下&#xff1a; 这是第一帧画面&#xff1a;P1&#xff08;我们的参考帧&#xff09; 这是第二帧画面&#xff1a;P2&#xff08;需要编码的帧&…

C2W4.LAB.Word_Embedding.Part2

理论课&#xff1a;C2W4.Word Embeddings with Neural Networks 文章目录 Training the CBOW modelForward propagationInitialization of the weights and biasesTraining exampleValues of the hidden layerValues of the output layerCross-entropy loss BackpropagationGr…

大家都在用的HR招聘管理工具:国内Top5排名

招聘管理工具是专为HR及招聘团队设计的数字化助手&#xff0c;旨在简化招聘流程&#xff0c;提高效率。众所周知&#xff0c;招聘管理工具通常集成简历收集、筛选、面试安排、候选人跟踪等功能于一体&#xff0c;让招聘过程更加流畅。使用招聘管理工具&#xff0c;不仅能节省时…

高边坡稳定安全监测预警系统解决方案

一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害&#xff0c;一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…

100个候选人,没一个能讲明白什么是自动化框架?

什么是自动化测试框架 01 什么是框架 框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法。它规定了应用的体系结构&#xff0c;阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程&#xff0c;表现为一组抽象类以及其实例之间…

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站&#xff01;本项目基本上是小格子一个人开发&#xff0c;由于工作和个人能力原因&#xff0c;部分技术都是边学习边开发&#xff0c;特别是前端&#xff08;工作中是后端开…