MySQL 基础:常用函数与事务隔离级别
在数据库开发中,掌握基础函数和事务机制是保证数据一致性的关键。
日期与时间处理
MySQL 提供了丰富的日期函数,常用于将时间戳转换为可读格式或反之。
SELECT FROM_UNIXTIME(1156219870); -- 输出:2006-08-22 12:11:10
SELECT UNIX_TIMESTAMP('2006-11-04 12:23:00'); -- 输出:1162614180
获取当前系统时间也很简单:
SELECT NOW(); -- 输出:2018-01-22 22:30:35
若需自定义显示格式,可使用 date_format:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 输出:2018-01-22 22:33:40
事务特性
事务(Transaction)是数据库操作的基本单元,具备以下四个核心特性(ACID):
- 原子性 (Atomicity):事务被视为最小工作单元,操作要么全部成功,要么全部失败回滚。
- 一致性 (Consistency):数据库始终从一个一致状态转换到另一个一致状态。正如《高性能 MySQL》所言,中间状态对其他事务不可见。
- 隔离性 (Isolation):通常事务在提交前对其他事务不可见。具体表现取决于隔离级别。
- 持久性 (Durability):事务一旦提交,修改即永久保存至磁盘。
隔离级别详解
SQL 标准定义了四种隔离级别,级别越低并发越高,但可能引发数据问题。
- 未提交读 (Read Uncommitted):最低级别。允许读取其他事务未提交的数据,可能导致脏读。
- 已提交读 (Read Committed):大多数数据库的默认级别。只能看到已提交的事务修改。多次查询同一数据可能结果不同,即不可重复读。
- 可重复读 (Repeatable Read):MySQL 默认级别。解决了脏读和不可重复读,但在特定场景下仍可能出现幻读(Phantom Read)。
- 可串行化 (Serializable):最高级别。强制事务串行执行,避免所有并发问题,但性能开销最大,易导致锁争用。
常见并发问题说明:
- 脏读:读取了另一事务未提交的数据。
- 不可重复读:同一事务内多次查询,因其他事务提交修改而返回不同值。
- 幻读:同一事务内查询某范围记录,因其他事务插入新记录导致行数变化。

