事务

收藏907

阅读10263

更新时间2025-08-21

事务是针对数据库执行的工作单元。 事务是按逻辑顺序完成的工作单元或序列,无论是由用户以手动方式还是由某种数据库程序自动完成。

事务是对数据库的一项或多项更改的传播。 例如,如果您正在创建记录、更新记录或从表中删除记录,那么您正在对表执行事务。 控制事务以确保数据完整性和处理数据库错误非常重要。

实际上,您会将许多 PostgreSQL 查询组合到一个组中,并将所有这些查询作为事务的一部分一起执行。

事务的属性

事务具有以下四个标准属性,通常用缩写词 ACID 表示 −

  • 原子性 − 确保工作单元内的所有操作都顺利完成; 否则,事务将在故障点中止,并且先前的操作将回滚到它们之前的状态。

  • 一致性 − 确保数据库在成功提交事务后正确更改状态。

  • 隔离性 − 使交易能够独立运作并相互透明。

  • 耐用性 − 确保已提交事务的结果或效果在系统故障的情况下仍然存在。


事务控制

以下命令用于控制事务 −

  • BEGIN TRANSACTION − 开始一个事务。

  • COMMIT − 要保存更改,您也可以使用 END TRANSACTION 命令。

  • ROLLBACK − 回滚更改。

事务控制命令仅与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。 在创建或删除表时不能使用它们,因为这些操作会自动提交到数据库中。

BEGIN TRANSACTION 命令

可以使用 BEGIN TRANSACTION 或简单的 BEGIN 命令启动事务。 此类事务通常会持续到遇到下一个 COMMIT 或 ROLLBACK 命令。 但如果数据库关闭或发生错误,事务也会 ROLLBACK。

以下是启动事务的简单语法 −

BEGIN;

or

BEGIN TRANSACTION;

COMMIT 命令

COMMIT 命令是用于将事务调用的更改保存到数据库的事务命令。

COMMIT 命令将自上次 COMMIT 或 ROLLBACK 命令以来的所有事务保存到数据库。

COMMIT 命令的语法如下 −

COMMIT;

or

END TRANSACTION;

ROLLBACK 命令

ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。

ROLLBACK 命令只能用于撤消自上次发出 COMMIT 或 ROLLBACK 命令以来的事务。

ROLLBACK 命令的语法如下 −

ROLLBACK;

示例

考虑 COMPANY 表有以下记录 −

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

现在,让我们开始一个事务并从表中删除年龄 = 25 的记录,最后我们使用 ROLLBACK 命令撤消所有更改。

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

如果您将检查 COMPANY 表仍然有以下记录 −

 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

现在,让我们开始另一个事务并从表中删除年龄 = 25 的记录,最后我们使用 COMMIT 命令提交所有更改。

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

如果您将检查 COMPANY 表,它仍然有以下记录 −

 id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号