数据库基础:TCL事务与DDL视图

数据库基础:TCL事务与DDL视图

前言 :本文是"数据库基础"系列的第八篇。前两篇我们学习了 DQL(数据查询语言)和 DML(数据操作语言),掌握了数据的增删改查。本篇我们将学习两个重要的数据库概念------事务视图。事务属于 TCL(事务控制语言),用于保证多条 SQL 语句要么全部执行成功,要么全部回滚,确保数据的一致性和完整性;视图属于 DDL(数据定义语言),是一种虚拟表,可以将复杂的查询语句封装起来,简化后续的使用。

目录

  • 一、事务(TCL)
  • 二、视图(DDL)
  • 三、总结

一、事务(TCL)

1.1 什么是事务?

事务是由一组 SQL 语句组成的执行单元 ,这个单元要么全部执行成功 ,要么全部执行失败。事务是保证数据一致性的重要机制。

通俗理解:转账操作就是一个典型的事务。用户 A 给用户 B 转账 500 元,需要执行两条 SQL:A 账户减 500,B 账户加 500。如果第一条执行成功,第二条因为意外失败,数据就会出现不一致。事务的作用就是保证这两条 SQL 要么都成功,要么都失败。

1.2 事务的四大特性(ACID)

特性 说明
原子性(Atomicity) 事务是不可分割的最小工作单元,要么全部执行,要么全部不执行
一致性(Consistency) 事务执行前后,数据从一个一致状态切换到另一个一致状态
隔离性(Isolation) 一个事务的执行不受其他事务的干扰
持久性(Durability) 事务一旦提交,对数据库的修改就是永久的

1.3 事务的基本操作

sql 复制代码
-- 开启事务
START TRANSACTION;

-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 500 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE user_id = 2;

-- 提交事务(确认修改)
COMMIT;

-- 或回滚事务(撤销修改)
ROLLBACK;

1.4 事务的隔离级别

多个事务同时执行时,可能会出现脏读、不可重复读、幻读等问题。SQL 标准定义了四种隔离级别:

隔离级别 说明
READ UNCOMMITTED 允许读取未提交的数据(会出现脏读)
READ COMMITTED 只能读取已提交的数据(可避免脏读)
REPEATABLE READ 同一事务中多次读取结果一致(MySQL 默认级别)
SERIALIZABLE 串行化执行,性能最低,安全性最高

二、视图(DDL)

2.1 什么是视图?

视图(View)是一种虚拟表 ,它不存储实际数据,而是保存了一条 SELECT 查询语句。当用户查询视图时,数据库会自动执行这条查询语句,并返回结果。

通俗理解:视图就像一扇"窗户",通过它可以看到底层表中经过筛选和加工后的数据。视图本身不存数据,只是"看"数据的一种方式。

2.2 为什么使用视图?

优点 说明
简化查询 将复杂的多表连接查询封装为视图,使用时只需 SELECT * FROM 视图名
提高复用性 一处定义,多处使用
数据安全 只暴露必要的字段,隐藏敏感信息
逻辑独立性 底层表结构变化时,视图可以保持不变

2.3 创建视图

语法

sql 复制代码
CREATE VIEW 视图名
AS
查询语句;

示例

sql 复制代码
-- 创建视图:查询员工的姓名、部门名和工种名
CREATE VIEW v_emp_info
AS
SELECT 
    e.last_name,
    d.department_name,
    j.job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;

-- 使用视图查询姓中包含 'a' 的员工
SELECT * FROM v_emp_info WHERE last_name LIKE '%a%';

2.4 修改视图

方式一:CREATE OR REPLACE VIEW

sql 复制代码
CREATE OR REPLACE VIEW v_emp_info
AS
SELECT department_name, job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;

方式二:ALTER VIEW

sql 复制代码
ALTER VIEW v_emp_info
AS
SELECT * FROM employees;

2.5 删除视图

语法

sql 复制代码
DROP VIEW 视图名1, 视图名2, ...;

示例

sql 复制代码
DROP VIEW v_emp_info;

2.6 视图与表的对比

对比维度 视图
存储数据 存储实际数据 只保存查询语句,不存数据
占用空间 占用磁盘空间 几乎不占用
增删改操作 支持 有一定限制(简单视图支持)
作用 存储基础数据 封装复杂查询,提供安全访问

三、总结

核心脉络

事务(TCL)

  • 事务是一组 SQL 语句的执行单元,要么全部执行,要么全部回滚
  • 四大特性:原子性、一致性、隔离性、持久性(ACID)
  • START TRANSACTION 开启,COMMIT 提交,ROLLBACK 回滚
  • MySQL 默认隔离级别为 REPEATABLE READ

视图(DDL)

  • 视图是虚拟表,不存数据,只存 SELECT 语句
  • 创建:CREATE VIEW 视图名 AS 查询语句
  • 修改:CREATE OR REPLACE VIEWALTER VIEW
  • 删除:DROP VIEW 视图名

注意事项

要点 说明
事务提交后不可回滚 COMMIT 后数据已持久化,无法撤销
视图不支持索引 查询视图本质是查询底层表,索引建在底层表上
视图的增删改限制 多表连接视图通常不支持插入和删除操作
事务隔离级别越高 数据一致性越好,但并发性能越低

系列直达

相关推荐
码农小麦1 小时前
LangChain 1.3.18 + DeepSeek-v4-flash 工具调用踩坑实录
网络·数据库·langchain
FfHUCisI1 小时前
Golang 切片扩容策略
开发语言·数据库·golang
en.en..1 小时前
Ubuntu嵌入式开发 export环境变量
java·开发语言·数据库
攻城有术1 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
IvorySQL1 小时前
基于 PostgreSQL 的非线性回归原理与 AI 数据库融合实践
数据库·人工智能·postgresql
赵渝强老师2 小时前
【赵渝强老师】高斯数据库(openGauss)的数据库对象
数据库·postgresql·opengauss·国产数据库·高斯数据库
DLYSB_2 小时前
交换机不会 HTTP 怎么办:用 SNMP Get / Trap 把指标和中断打到博灵声光 TTS
数据库·报警灯
wdfk_prog2 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
昌原的儿子LEO2 小时前
Linux 网络编程:select 与 epoll IO 多路复用详解
linux·网络·数据库