Skip to content

MySQL 进阶教程

本文将介绍 MySQL 数据库的事务、范式以及其他进阶主题。

1. 数据库事务

数据库事务是一个逻辑操作单元,由一系列 SQL 语句组成,这些语句要么全部执行成功,要么全部不执行。事务具有以下四个特性(ACID):

  • 原子性 (Atomicity): 事务中的所有操作要么全部完成,要么全部不完成。
  • 一致性 (Consistency): 事务开始前和结束后,数据库的状态必须保持一致。
  • 隔离性 (Isolation): 事务的执行不应受其他事务的影响。
  • 持久性 (Durability): 一旦事务提交,其结果是永久性的,即使系统崩溃也不会丢失。

1.1 开始事务

sql
START TRANSACTION;

1.2 提交事务

sql
COMMIT;

1.3 回滚事务

sql
ROLLBACK;

1.4 事务示例

sql
START TRANSACTION;

INSERT INTO accounts (user, balance) VALUES ('Alice', 100);
UPDATE accounts SET balance = balance - 50 WHERE user = 'Bob';

COMMIT;

2. 数据库范式

数据库范式是设计数据库时的一种指导原则,旨在减少数据冗余和提高数据完整性。常见的范式有:

  • 第一范式 (1NF): 确保每个列的值都是原子性的,即不可再分。
  • 第二范式 (2NF): 在满足 1NF 的基础上,确保每个非主属性完全依赖于主键。
  • 第三范式 (3NF): 在满足 2NF 的基础上,确保非主属性不依赖于其他非主属性。

2.1 第一范式示例

不符合 1NF 的数据表:

IDNamePhone Numbers
1John Doe1234567890, 0987654321

符合 1NF 的数据表:

IDNamePhone Number
1John Doe1234567890
1John Doe0987654321

2.2 第二范式示例

不符合 2NF 的数据表:

OrderIDProductIDProductNameCustomerID
1101Widget1
1102Gadget1

符合 2NF 的数据表:

Orders 表

OrderIDCustomerID
11

Products 表

ProductIDProductName
101Widget
102Gadget

OrderDetails 表

OrderIDProductID
1101
1102

2.3 第三范式示例

不符合 3NF 的数据表:

StudentIDStudentNameAdvisorName
1AliceDr. Smith

符合 3NF 的数据表:

Students 表

StudentIDStudentName
1Alice

Advisors 表

AdvisorIDAdvisorName
1Dr. Smith

StudentAdvisors 表

StudentIDAdvisorID
11

3. 其他进阶主题

3.1 索引

索引是提高查询性能的一种数据结构。可以通过以下命令创建索引:

sql
CREATE INDEX index_name ON table_name (column_name);

3.2 视图

视图是基于 SQL 查询的虚拟表,可以简化复杂查询。创建视图的命令如下:

sql
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;

3.3 存储过程

存储过程是一组预编译的 SQL 语句,可以通过名称调用。创建存储过程的命令如下:

sql
CREATE PROCEDURE procedure_name AS
BEGIN
    -- SQL 语句
END;

4. 结语

本文介绍了 MySQL 的事务、范式以及其他进阶主题。希望能帮助您更深入地理解和使用 MySQL 数据库。更多详细信息请参考 MySQL 官方文档.