关系型数据库(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.mzph.cn/pingmian/57796.shtml

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

相关文章

全面指南:Visual Studio Code 的下载、安装、使用与插件管理

活着&#xff0c;就是一场盛大的遇见&#xff0c;与世界&#xff0c;与自己&#xff0c;与每一个瞬间的奇迹 文章目录 前言下载 Visual Studio Code安装 Visual Studio CodewindowsmacOSLinux 使用 Visual Studio CodeVisual Studio Code 插件安装方法语言支持代码格式化与美化…

vue3项目中引入阿里图标库

开篇 本篇的主题是在vue3项目中引入阿里图标库 步骤 注册阿里图标库账号(阿里图标)&#xff0c;并创建项目 将图标加入项目中 将需要的图标先加入购物车&#xff0c;随后加入到项目中 生成项目代码 在项目中生成项目代码&#xff0c;便于后续复制到vue项目中 ## 在vue3项目…

HTML5教程(一)- 网页与开发工具

1. 什么是网页 网页 基于浏览器阅读的应用程序&#xff0c;是数据&#xff08;文本、图像、视频、声音、链接等&#xff09;展示的载体常见的是以 .html 或 .htm 结尾的文件 网站 使用 HTML 等制作的用于展示特定内容相关的网页集合。 2. 网页的组成 浏览器 代替用户向服务…

C#中的委托、匿名方法、Lambda、Action和Func

委托 委托概述 委托是存有对某个方法的引用的一种引用类型变量。定义方法的类型&#xff0c;可以把一个方法当作另一方法的参数。所有的委托&#xff08;Delegate&#xff09;都派生自 System.Delegate 类。委托声明决定了可由该委托引用的方法。 # 声明委托类型 委托类型声…

现代Web酒店客房管理:基于Spring Boot的实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

C#与Sqlite数据库

1&#xff0c;一般的访问方式。 1.1&#xff0c;连接语句。 //sqlite 连接,支持相对位置&#xff0c;也支持绝对位置 Data Source../../Database/cater.db// 连接数据库&#xff0c;FailIfMissingfalse时若文件不存在会自动创建 string connStr "DataSourcetest.db;Vers…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后&#xff0c;我们可以尝试理解一下Shell的原理&#xff0c;将各方知识串联起来&#xff0c;让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

基于flask和neo4j的医疗知识图谱展示问答系统

如果你仍在为毕业设计的选题发愁&#xff0c;或者想通过技术项目提升专业实力&#xff0c;这个基于Flask和Neo4j的医疗知识图谱展示与问答系统&#xff0c;绝对是个不错的选择&#xff01; 项目亮点大揭秘&#xff1a; 知识图谱与问答结合&#xff1a;我们采用了医疗场景下的知…

时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛数据集

【实验名称】 实验一&#xff1a;时间数据的可视化 【实验目的】 1.掌握时间数据在大数据中的应用 2.掌握时间数据可视化图表表示 3. 利用python程序实现堆叠柱形图的可视化 【实验原理】 时间是一个非常重要的维度与属性。时间序列数据存在于社会的各个领域&#xff0c;如&a…

【Power Query】List.Select 筛选列表

List.Select 筛选列表 ——在列表中返回满足条件的元素 List.Select(列表,判断条件) 不是列表的可以转成列表再筛选&#xff0c;例如 Record.ToList 不同场景的判断条件参考写法 (1)单条件筛选 列表中小于50的数字 List.Select({1,99,8,98,5},each _<50) (2)多条件筛…

高低温探针台的工作原理及其构造

高低温探针台是一种用于材料科学、物理、化学等领域的实验设备&#xff0c;主要用于在高温和低温环境下对材料进行各种实验和研究。 高低温探针台的工作原理是将样品放置在加热和冷却组件上&#xff0c;然后使用各种测量仪器对其进行实验和测量。具体来说&#xff0c;其工作流程…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持UDP和TCP传输协议

随着科技的飞速发展&#xff0c;视频技术已成为现代社会不可或缺的一部分&#xff0c;广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。在这一背景下&#xff0c;NVR管理平台EasyNVR作为一款高效、灵活的视频监控管理系统&#xff0c;正经历着前所未有的发展机遇…

iOS 本地存储地址(位置)

前言: UserDefaults 存在沙盒的 Library --> Preferences--> .plist文件 CoreData 存在沙盒的 Library --> Application Support--> xx.sqlite 一个小型数据库里 (注:Application Support 这个文件夹已开始是没有的,只有当你写了存储代码,运行之后,目录里才会出…

MT-Pref数据集:包含18种语言的18k实例,涵盖多个领域。实验表明它能有效提升Tower模型在WMT23和FLORES基准测试中的翻译质量。

2024-10-10&#xff0c;由电信研究所、里斯本大学等联合创建MT-Pref数据集&#xff0c;它包含18种语言方向的18k实例&#xff0c;覆盖了2022年后的多个领域文本。通过在WMT23和FLORES基准测试上的实验&#xff0c;我们展示了使用MT-Pref数据集对Tower模型进行对齐可以显著提高翻…

C++list

1.迭代器的功能以及性质 功能有iterator&#xff0c;reverse_iterator&#xff0c;const_iterator&#xff0c;const_reverse_iterator 性质有单向&#xff0c;双向和随机&#xff0c;单向的迭代器只能操作&#xff0c;双向只能/--俩种&#xff0c;随机则可以执行/--//-的操作…

【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

[快速阅读八] Matlab中bwlookup的实现及其在计算二值图像的欧拉数、面积及其他morph变形中的应用。...

以前看过matlab的bwlookup函数&#xff0c;但是总感觉有点神秘&#xff0c;一直没有去仔细分析&#xff0c;最近在分析计算二值图像的欧拉数时&#xff0c;发现自己写的代码和matlab的总是对不少&#xff0c;于是又去翻了下matlab的源代码&#xff0c;看到了matlab里实现欧拉数…

JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

计算机网络原理总结C-网络层

网络层 网络层提供的两种服务网际协议IP 虚拟互连网络IP地址子网掩码&#xff08;无分类编址CIDR&#xff09;IP地址和MAC地址IP数据报格式&#xff08;路由&#xff09;转发分组的流程 因特网的路由选择协议&#xff08;动态路由协议&#xff09; 网际控制报文协议ICMPIP多播…

麒麟v10 arm64 部署 kubesphere 3.4 修改记录

arm64环境&#xff0c;默认安装 kubesphere 3.4 &#xff0c;需要修改几个地方的镜像&#xff0c;并且会出现日志无法显示 1 fluentbit:v1.9.4 报错 <jemalloc>: Unsupported system page size Error in GnuTLS initialization: ASN1 parser: Element was not found. &…