MySQL数据库:多表查询与事务操作详解

需积分: 8 1 下载量 77 浏览量 更新于2024-08-05 收藏 16KB MD 举报
"MySQL多表&事务课堂笔记" 在学习数据库管理时,MySQL是常见的关系型数据库管理系统,而多表查询和事务处理是其核心概念。本篇笔记将深入探讨这两个主题。 ### 多表查询 多表查询是数据库操作中的重要部分,特别是在处理复杂的数据关联时。MySQL支持多种多表查询方法,以满足不同场景的需求。 #### 查询语法 多表查询的基本语法结构如下: ```sql SELECT 列名列表 FROM 表名列表 WHERE 条件; ``` 例如,创建了两个表——`dept`(部门表)和`emp`(员工表),它们之间通过`dept_id`建立了外键关系。`dept`表包含部门ID(`id`)和部门名称(`NAME`),而`emp`表包含员工ID(`id`)、姓名(`NAME`)、性别(`gender`)、工资(`salary`)、入职日期(`join_date`)以及所属部门ID(`dept_id`)。 为了查询员工与其所在部门的信息,可以使用多表查询: ```sql SELECT emp.NAME AS '员工姓名', emp.gender, emp.salary, dept.NAME AS '部门名称' FROM emp JOIN dept ON emp.dept_id = dept.id; ``` #### 笛卡尔积 当两个表进行不带任何连接条件的查询时,会得到一个包含所有可能组合的结果集,这就是笛卡尔积。在上述示例中,如果忽略了`JOIN`或`WHERE`条件,就会得到所有员工与所有部门的组合,这通常不是我们想要的结果。 #### 内连接查询 内连接用于获取两个表中存在匹配记录的结果。它分为两种形式: 1. **隐式内连接**:通过`WHERE`子句来指定连接条件,例如: ```sql SELECT e.NAME, d.NAME FROM emp e, dept d WHERE e.dept_id = d.id; ``` 2. **显式内连接**:使用`JOIN`关键字明确指定连接类型,如`INNER JOIN`: ```sql SELECT e.NAME, d.NAME FROM emp e INNER JOIN dept d ON e.dept_id = d.id; ``` 除了内连接,还有其他类型的连接,如外连接(左连接、右连接和全连接),用于获取不同连接策略下的结果。 ### 事务 事务是数据库操作的逻辑单元,包含一组数据库操作,这些操作要么全部成功,要么全部回滚。事务处理确保了数据的一致性和完整性。 #### 事务的四大特性(ACID) 1. **原子性(Atomicity)**:事务中的所有操作被视为单个不可分割的操作,即使其中一个失败,整个事务也会被撤销。 2. **一致性(Consistency)**:事务完成后,数据库必须处于一致状态,即所有规则和约束都得到遵守。 3. **隔离性(Isolation)**:事务在执行过程中与其他事务隔离,确保每个事务独立进行,不受其他事务的影响。 4. **持久性(Durability)**:一旦事务提交,其结果就会永久保存,即使系统出现故障也不会丢失。 #### 事务控制语句 MySQL提供以下DML语句来管理事务: - **BEGIN**:开始一个新事务。 - **COMMIT**:提交当前事务,使其对数据库的更改永久化。 - **ROLLBACK**:回滚当前事务,撤销所有未提交的更改。 - **SAVEPOINT`savepoint_name`**:设置一个保存点,可以在回滚时恢复到特定状态。 - **RELEASE SAVEPOINT`savepoint_name`**:删除指定的保存点。 - **ROLLBACK TO SAVEPOINT`savepoint_name`**:回滚到指定的保存点。 ### DCL语句 DCL(Data Control Language)是数据库控制语言,用于设置和更改用户权限,包括: 1. **GRANT**:授予用户或角色访问数据库对象的权限。 2. **REVOKE**:撤销已授予用户的权限。 3. **CREATE USER** / **DROP USER**:创建和删除数据库用户。 4. **ALTER USER**:修改用户属性,如密码。 5. **SET PASSWORD**:为用户设置或更改密码。 多表查询和事务是MySQL数据库管理的关键概念。熟练掌握这些技能,可以更高效地处理和维护复杂的数据库结构,并确保数据的安全性和一致性。