MySQL学习系列(2)-每天学习10个知识

目录

    • [1. INNER JOIN 和 ON 子句](#1. INNER JOIN 和 ON 子句)
    • [2. 死锁](#2. 死锁)
    • [3. SELECT * 和 SELECT column1, column2](#3. SELECT * 和 SELECT column1, column2)
    • [4. 数据库的视图](#4. 数据库的视图)
    • [5. MySQL的触发器类型](#5. MySQL的触发器类型)
    • [6. MySQL表的备份和恢复](#6. MySQL表的备份和恢复)
    • [7. MySQL存储引擎](#7. MySQL存储引擎)
    • [8. 索引优化](#8. 索引优化)
    • [9. MySQL中的子查询](#9. MySQL中的子查询)
    • [10. 使用连接(JOIN)从多个表中检索数据](#10. 使用连接(JOIN)从多个表中检索数据)

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


1. INNER JOIN 和 ON 子句

INNER JOIN 用于合并两个或多个表中的数据,返回符合条件的行。ON 子句指定连接条件,即确定如何将表连接起来。INNER JOIN 和 ON 通常一起使用,以便根据指定的条件连接表。

sql 复制代码
SELECT customers.name, orders.order_number
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

在上述示例中,INNER JOIN 用于连接 "customers" 表和 "orders" 表,ON 子句指定了连接条件,即 "customers.id" 等于 "orders.customer_id"。

2. 死锁

死锁是指两个或多个事务互相等待对方释放资源的情况,导致它们都无法继续执行。MySQL 使用锁机制来保护数据的完整性。当多个事务同时请求资源并且互相持有对方需要的资源时,可能会发生死锁。

MySQL 处理死锁的方法通常包括超时机制和死锁检测。当检测到死锁时,MySQL会选择一个事务作为死锁牺牲者,并回滚该事务,以释放资源,允许其他事务继续。

3. SELECT * 和 SELECT column1, column2

  • SELECT * FROM table_name:这将检索指定表中的所有列和所有行的数据。
  • SELECT column1, column2 FROM table_name:这将仅检索指定表中的列 "column1" 和 "column2" 的数据,而不检索其他列的数据。

使用 **SELECT * ** 会导致检索所有列的数据,可能浪费带宽和内存,而且不容易维护。因此,最好明确指定需要的列,以减小数据集的大小。

4. 数据库的视图

数据库的视图是虚拟表,其内容基于一个或多个实际表的查询结果。视图不存储数据,而是根据查询的定义动态生成结果。视图的作用包括:

  • 简化复杂的查询:将复杂的查询逻辑封装在视图中,以便用户可以轻松执行查询。
  • 数据安全性:通过视图,可以限制用户只能访问他们需要的数据,而不是整个表。
  • 数据抽象:视图可以隐藏底层表的细节,使用户更容易理解和使用数据。

5. MySQL的触发器类型

MySQL支持以下类型的触发器:

  • BEFORE INSERT:在插入数据之前触发。
  • AFTER INSERT:在插入数据之后触发。
  • BEFORE UPDATE:在更新数据之前触发。
  • AFTER UPDATE:在更新数据之后触发。
  • BEFORE DELETE:在删除数据之前触发。
  • AFTER DELETE:在删除数据之后触发。

触发器允许您在数据库中定义自动化操作,以响应特定的数据更改事件。

6. MySQL表的备份和恢复

备份MySQL表可以使用工具如mysqldump或通过复制数据文件来完成。要备份单个表,可以使用以下命令:

bash 复制代码
mysqldump -u username -p dbname tablename > table_backup.sql

要恢复备份的表,可以使用以下命令:

bash 复制代码
mysql -u username -p dbname < table_backup.sql

7. MySQL存储引擎

MySQL支持多种存储引擎,包括:

  • InnoDB:支持事务、外键和行级锁,适用于事务性应用。
  • MyISAM:不支持事务,但速度快,适用于只读或读写很少的应用。
  • MEMORY:将数据存储在内存中,速度非常快,但不持久。
  • CSV:用于读写CSV文件格式的数据。
  • ARCHIVE:用于存储大量归档数据。
  • 等等。

每种存储引擎都有其独特的特点和适用场景。

8. 索引优化

索引优化是通过创建适当的索引来提高数据库查询性能的过程。索引可以加速查询,特别是在大型表中。在MySQL中,优化索引是非常重要的,因为它可以大幅提高查询效率。

正确选择哪些列创建索引、使用合适的索引类型和定期维护索引都是索引优化的关键方面。

9. MySQL中的子查询

子查询是一个查询嵌套在另一个查询内部的查询。它可以用于WHERE子句、FROM子句和SELECT子句中。

例如,使用子查询来查找某个表中某个列的最大值:

sql 复制代码
SELECT column1
FROM table_name
WHERE column2 = (SELECT MAX(column2) FROM table_name);

10. 使用连接(JOIN)从多个表中检索数据

使用连接(JOIN),您可以从多个相关联的表中检索数据。例如,使用INNER JOIN连接两个表:

sql 复制代码
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

上述查询将检索包含订单ID和客户名称的数据,连接了 "orders" 表和 "customers" 表。

相关推荐
云和数据.ChenGuang16 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys44 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论