一、Mysql表引擎
Myisam:
Mysql 5.5 版本之前的默认表引擎
不支持事务
不支持外键
提供 表锁
存储数据时,会将数据存储在三个文件中:一个文件存数据,一个文件存结构,一个文件存索引
innodb:
支持事务
支持外键
提供 行锁
存储数据时,会将数据存储在两个文件中:一个文件存数据和索引,一个文件存结构
查询速度相对较慢
二、事务(Transaction)的概述
MySQL 事务主要用于处理操作量大,复杂度高的数据。
在 MySQL 中只有使用了 Innodb 数据库引擎 的数据库或表才支持事务。
事务是一个不可再分的工作单元;通常将一组有序的增删改操作看做一个独立的执行单
MySQL 事务理解及相关操作
MySQL 是一款广泛应用的关系型数据库管理系统,它支持多种表引擎,其中两种最常见的是 MyISAM 和 InnoDB。MyISAM 是 MySQL 5.5 版本之前的默认表引擎,它不支持事务处理和外键,但提供表级锁定。数据存储在三个文件中:数据文件、结构文件和索引文件。相比之下,InnoDB 支持事务处理和外键,提供行级锁定,从而提高并发性能,但查询速度相对较慢。InnoDB 存储数据在一个包含数据和索引的文件以及一个存储结构的文件中。
事务(Transaction)是数据库操作的基本单位,它确保了一组操作的原子性和一致性。在 MySQL 中,只有使用 InnoDB 引擎的数据库或表才支持事务。事务具有四大特性,也称为 ACID 原则:
1. 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不允许部分执行。
2. 一致性(Consistency):事务前后,数据库保持一致状态,满足预设的完整性约束。
3. 隔离性(Isolation):并发事务之间相互隔离,防止数据不一致。MySQL 提供了四种不同的事务隔离级别:
- 读未提交(Read Uncommitted):可能导致脏读、不可重复读和幻读。
- 读已提交(Read Committed):防止脏读,但可能出现不可重复读。
- 可重复读(Repeatable Read):MySQL 默认级别,防止脏读和不可重复读,但可能出现幻读。
- 串行化(Serializable):最高隔离级别,防止所有问题,但可能牺牲性能。
4. 持久性(Durability):一旦事务提交,其结果将永久保存,即使系统故障也不会丢失。
事务隔离级别的选择需要平衡数据一致性与并发性能。例如,读未提交级别允许更高的并发,但可能导致数据不一致;而串行化级别虽保证数据一致性,但可能导致并发性能下降。
在 MySQL 中,可以通过 `BEGIN` 或 `START TRANSACTION` 显式开启事务,并通过 `COMMIT` 提交事务,`ROLLBACK` 回滚事务。默认情况下,MySQL 的自动提交模式是开启的,每次 SQL 语句都会自动提交。可以通过 `SET AUTOCOMMIT=0` 禁用自动提交。
设置事务隔离级别的方法有两种:在 MySQL 配置文件 `my.ini` 中全局设置 `transaction-isolation` 选项,或者在会话级别使用 SQL 命令 `SET TRANSACTION ISOLATION LEVEL` 指定所需隔离级别。例如,设置为可重复读级别:
```sql
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
```
了解并正确使用事务和事务隔离级别对于维护数据库的完整性和一致性至关重要,特别是在处理大量数据和复杂业务逻辑时。通过选择合适的事务策略,开发者可以在保障数据安全的同时,实现高效的数据库操作。