当前位置: 首页 > news >正文

关系型数据库(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. 连接池的注意事项

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

相关文章:

关系型数据库(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. 主键约束&#xff08;PRIMARY…...

计算机毕业设计Python+大模型租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 用到的技术: 1. python…...

深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析

深度学习的技术演进经历了从卷积神经网络&#xff08;CNN&#xff09;到循环神经网络&#xff08;RNN&#xff09;再到 Transformer 的重要发展。这三个架构分别擅长处理图像、序列数据和多种任务的特征&#xff0c;标志着深度学习在不同领域取得的进步。 1. 卷积神经网络&…...

Lua中的goto语句

软考鸭微信小程序 过软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 在Lua编程语言中&#xff0c;goto语句是一种跳转语句&#xff0c;用于将程序的执行流程无条件地转移到程序中的另一个位置。这个位置由一个标签&#xff08;…...

【rust实战】rust博客系统2_使用wrap启动rust项目服务

如何创建一个使用warp框架的rust项目1.使用cargo 创建项目 cargo new blog 2.添加warp依赖 1.cd blog 2.编辑Cargo.toml文件 添加warp 和 tokio 作为依赖项 在[dependencies]中添加 [package] name "blog" version "0.1.0" …...

【实战案例】Django框架使用模板渲染视图页面及异常处理

本文基于之前内容列表如下&#xff1a; 【图文指引】5分钟搭建Django轻量级框架服务 【实战案例】Django框架基础之上编写第一个Django应用之基本请求和响应 【实战案例】Django框架连接并操作数据库MySQL相关API 视图概述 Django中的视图的概念是一类具有相同功能和模板的网…...

设置K8s管理节点异常容忍时间

说明 每个节点上的 kubelet 需要定时向 apiserver 上报当前节点状态&#xff0c;如果两者间网络异常导致心跳终端&#xff0c;kube-controller-manager 中的 NodeController 会将该节点标记为 Unknown 或 Unhealthy&#xff0c;持续一段时间异常状态后 kube-controller-manage…...

什么样的JSON编辑器才好用

简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也便于机器解析和生成。随着互联网和应用程序的快速发展&#xff0c;JSON已经成为数据传输和存储的主要格式之一。在处理和编辑JSON数据…...

ArkUI自定义TabBar组件

在ArkUI中的Tabs&#xff0c;通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。其中内容是图TabContent作为Tabs的自组件&#xff0c;通过给TabContent设置tabBar属性来自定义导航栏样式。现在我们就根据UI设计的效果图来实现下图效果&#xff1a; 根…...

pair类型应用举例

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <utility> //使能pair数据类型; #include <string> //使能string字符串; #include <stdlib.h> //使能exit(); //pair类型可以将两个相同的或不同类…...

数字 图像处理算法的形式

一 基本功能形式 按图像处理的输出形式&#xff0c;图像处理的基本功能可分为三种形式。 1&#xff09;单幅图像 单幅图像 2&#xff09;多幅图像 单幅图像 3&#xff09;单&#xff08;或多&#xff09;幅图像 数字或符号等 二 几种具体算法形式 1.局部处理邻域对于任一…...

安徽对口高考Python试题选:输入一个正整数,然后输出该整数的3的幂数相加形式。

第一步&#xff1a;求出3的最高次幂是多少 guoint(input("请输入一个正整数:")) iguo a0 while i>0: if 3**i<guo: ai break ii-1print(a)#此语句为了看懂题目&#xff0c;题目中不需要打印出最高幂数 第二步…...

Node.js是什么? 能做什么?

‌Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使用事件驱动、非阻塞式I/O模型&#xff0c;使得JavaScript能够在服务器端运行。Node.js允许JavaScript脱离浏览器&#xff0c;直接在服务器和计算机上使用&#xff0c;极大地扩展了JavaScript的应用范围。…...

JVM快速入门

1、 JVM探究 面试问题 :谈谈对JVM的理解? java8虚拟机和之前的变化更新?什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取,怎么分析Dump文件?知道吗?谈谈JVM中,类加载器你的认识?2、JVM的位置 3、JVM的体系结构 3.1…...

理解深度学习模型——高级音频特征表示的分层理解

理解深度学习模型可以是一个复杂的过程&#xff0c;因为这些模型通常包含大量的参数和层次。 &#xff08;1&#xff09;复杂性来源&#xff1a; 深度学习模型的复杂性来源于多个方面&#xff0c;包括模型的规模、层次结构、参数数量以及训练数据的复杂性。以下是一些关键点&a…...

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中&#xff0c;为了软件使用整体色调看起来统一&#xff0c;一般顶部和底部的颜色需要铺满整个手机屏幕。因此&#xff0c;这篇帖子是介绍设置的方法&#xff0c;也是应用沉浸式效果。如下图&#xff1a;底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…...

数据结构 ——— 树的概念及结构

目录 树的结构以及示意图 树的概念​编辑 树的结构与递归的关系​编辑 树的结构以及示意图 树是一种非线性的数据结构&#xff0c;它是由 n(n>0) 个有限节点组成一个具有层次关系的集合 把这种结构叫做树是因为它看起来像一棵倒挂的树 特点&#xff1a; 有一个特殊的…...

初探Vue前端框架

文章目录 简介什么是Vue概述优势MVVM框架 Vue的特性数据驱动视图双向数据绑定指令插件 Vue的版本版本概述新版本Vue 3Vue 3新特性UI组件库UI组件库概述常用UI组件库 安装Vue安装Vue查看Vue版本 实例利用Vue命令创建Vue项目切换工作目录安装vue-cli脚手架创建Vue项目启动Vue项目…...

Lucas带你手撕机器学习——岭回归

岭回归&#xff08;Ridge Regression&#xff09; 一、背景与引入 在进行线性回归分析时&#xff0c;我们常常面临多重共线性的问题。多重共线性指的是自变量之间高度相关&#xff0c;这会导致回归系数的不稳定性&#xff0c;使得模型的预测能力降低。传统的线性回归通过最小…...

C2W4.LAB.Word_Embedding.Part1

理论课&#xff1a;C2W4.Word Embeddings with Neural Networks 文章目录 Word Embeddings First Steps: Data PreparationCleaning and tokenizationSliding window of wordsTransforming words into vectors for the training setMapping words to indices and indices to w…...

hive初体验

1.首先&#xff0c;确保启动了Metastore服务。 runjar就是metastore进程 2.进入hive客户端: 命令:hive 3.操作:没有指定数据库时默认在default 一:创建表:CREATE TABLE test(id INT, name STRING, gender STRING); 完成,show tables看一下 也可以通过hdfs文件系统查看,默认路径…...

云渲染主要是分布式(分机)渲染,如何使用blender云渲染呢?

云渲染主要是分布式&#xff08;分机&#xff09;渲染&#xff0c;比如一个镜头同时开20-100张3090显卡的机器渲染&#xff0c;就能同时渲染20-100帧&#xff0c;渲染不仅不占用自己电脑&#xff0c;效率也将增加几十上百倍&#xff01; blender使用教程如下&#xff1a; 第一…...

WordPress与WP Engine:关键事件时间线

WordPress与WP Engine&#xff1a;关键事件时间线 以下时间线突出了9月和10月之间这场不断升级的WordPress与WP Engine冲突中的关键事件&#xff1a; 9月21日&#xff1a;Matt Mullenweg发布了一篇名为“WP Engine不是WordPress”的博客。 9月22日&#xff1a;Mullenweg批评…...

大数据治理平台建设规划方案(71页WORD)

随着信息化时代的到来&#xff0c;大数据已成为企业管理和决策的重要基础。然而&#xff0c;大数据的快速增长和复杂性给数据的管理和治理带来了巨大挑战。为了有效应对这些挑战&#xff0c;构建一个高效、稳定的大数据治理平台显得尤为重要。 文档介绍&#xff1a; 该平台旨在…...

Maven 项目管理工具

目录 Maven简介 Maven快速上手 Maven详细介绍 Maven工作机制 Maven安装及配置 使用IDEA创建Maven Web工程 Maven简介 Maven是 Apache 开源组织奉献的一个开源项目&#xff0c;可以翻译为“专家”或“内行”。 Maven 的本质是一个项目管理工具&#xff0c;将项目开发和管…...

ubuntu开机启动jar

要在Ubuntu系统上开机启动一个jar文件&#xff0c;你可以创建一个systemd服务单元。以下是创建服务并设置开机启动的步骤&#xff1a; 创建一个新的systemd服务文件。 打开一个新的服务文件&#xff0c;例如/etc/systemd/system/your-service.service&#xff0c;使用你喜欢的…...

【目标检测02】非极大值抑制 NMS

文章目录 1. 前言2. 原理3. 代码实现 1. 前言 在检测图像中的目标时&#xff0c;一个目标可能会被预测出多个矩形框&#xff0c;而实际上我们只需要一个&#xff0c;如何消除冗余的边界框呢&#xff1f;一种方简单的方案是提升置信度的阈值&#xff0c;过滤掉低置信度的边界框…...

104协议调试工具

在学习104协议过程中&#xff0c;通过直接阅读协议的学习方式会略有枯燥&#xff0c;这里把常用的104调试、测试工具介绍给大家&#xff0c;以便快速的进行模拟通信来更好的了解、学习104协议。 通信协议分析及仿真软件是非常重要的测试工具&#xff0c;该软件支持 101,104,mo…...

日常记录:es TransportClient添加证书处理

背景 最近在搞es登录&#xff0c;不知道是不是低版本问题&#xff08;6.8.12&#xff09;&#xff0c;开启登录之后springboot连接es&#xff0c;es一直报Caused by: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 45530000002c000000000000009108004d3…...

apply call bind 简介

Function.prototype.call(thisArg [, arg1, arg2, …]) call() 简述 call() 方法 调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。当第一个参数为 null、undefined 的时候&#xff0c; 默认 this 上下文指向window。 call() 简单实例 const name …...

优秀的国外网站/西安抖音seo

需求&#xff1a;客户端界面需要一个软键盘进行操作 做了一个简易的例子进行展示。 html代码&#xff1a; <div id"container"> <div class"print-right"><div id"right-top" class"right-top"><div class&quo…...

手机网站自助建设/网站建设有多少公司

oracle分类排序/排行可以通过聚合函数rank() 和 dense_rank() 来实现。 rank() 和 dense_rank() &#xff1a; --两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续&#xff0c;不连续)&#xff0c;对应函数&#xff1a;dense_rank,rank dense_rank与ran…...

app设计平台/结构优化

如果有同学看完上一篇关于MySQL文章&#xff0c;文末留有两个很开放的问题&#xff0c;如有兴趣可以在脑袋里想想。本文也会试着回答这两个问题&#xff0c;希望能给你一些参考。现在可以思考一个问题&#xff0c;如果数据量非常大的情况下&#xff0c;您根据业务选择了合适的字…...

彩票网站做代理/网络营销的缺点及建议

首先查看配置内mysqlDriver 是否匹配&#xff1a; com.mysql.jdbc.Driver 是 mysql-connector-java 5中的&#xff0c;com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的 其次查看pom内驱动是否版本对应、 mysql的版本对应jdbc驱动的版本 Connector/J 5.1 支持Mysql 4.…...

上海网站推广汉狮/网站子域名查询

常用Action说明&#xff1a; String ADD_SHORTCUT_ACTION 动作&#xff1a;在系统中添加一个快捷方式。. “android.intent.action.ADD_SHORTCUT”String ALL_APPS_ACTION 动作&#xff1a;列举所有可用的应用。 输入&#xff1a;无。 “android.intent.action.ALL_APPS”Strin…...

做暧暧视频网站免费/怎么自己刷推广链接

自20年前TIOBE指数开始以来&#xff0c;Java和C首次不再占据前两位。 C仍然是第一&#xff0c;但现在是Python占据了第二的位置。有人说&#xff0c;Python最近的流行是由于数据挖掘、人工智能和数值计算等领域的蓬勃发展,但我有自己的看法。我相信Python的流行与一般需求有关…...