PostgreSQL - 事务:初学者指南

嘿,未来的数据库大师们!今天,我们将深入到PostgreSQL事务的神奇世界。如果你之前从未编写过一行代码,也不用担心——我将作为你这次旅行的友好向导。在本教程结束时,你将能够像专业人士一样处理事务!

PostgreSQL - Transactions

什么是事务?

在我们深入细节之前,先来了解一下事务是什么。想象你正在将钱从一个银行账户转移到另一个账户。你肯定不希望钱从一个账户中消失而没有出现在另一个账户中,对吧?这就是事务的用武之地。它们确保一系列数据库操作要么全部成功,要么全部一起失败。这就像是“要么全部,要么没有”的交易。

事务控制

现在,让我们来看看如何在PostgreSQL中控制这些事务。我们有一些魔法词汇(命令)可以使用:

命令 描述
BEGIN 开始一个新的事务
COMMIT 保存事务中做的所有更改
ROLLBACK 撤销事务中做的所有更改

把这些命令想象成我们数据库高速公路上的交通信号灯。BEGIN是绿灯,表示“前进!”;COMMIT是终点线的方格旗,表示“好了,完成!”;ROLLBACK是红灯,表示“哦哦,让我们重新开始!”

BEGIN命令

让我们从BEGIN命令开始。这就好比说:“好的,PostgreSQL,注意了!我们即将做一些重要的事情。”

BEGIN;
-- 你的数据库操作在这里进行

当你输入BEGIN时,PostgreSQL准备好跟踪你即将做的所有更改。这就好比打开笔记本的新一页——你现在写下的所有内容都将属于这个事务。

COMMIT命令

下一个是我们的好朋友COMMIT。这是魔法发生的地方!

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

在这个例子中,我们正在将100美元从账户1转移到账户2。最后的COMMIT告诉PostgreSQL:“好了,我们做完了。让这些更改永久生效!”这就像是你在最喜欢的视频游戏上按下保存按钮——你的进度现在被锁定。

ROLLBACK命令

但万一出错了怎么办?这时ROLLBACK就派上用场了!

BEGIN;
UPDATE accounts SET balance = balance - 1000000 WHERE account_id = 1;
-- 哦哦!我们并不想转移一百万美元!
ROLLBACK;

ROLLBACK就像是你信任的橡皮擦。它抹去了自上次BEGIN以来你所做的所有更改。在这个例子中,我们意外地试图转移一百万美元(那该多好呀!),但ROLLBACK救我们免于面对一个非常愤怒的客户,可能还有丢失工作的风险!

现实世界的例子

让我们用一个更复杂的例子来把所有内容结合起来。想象我们正在运营一家小型在线书店:

BEGIN;

-- 将一本新书添加到我们的库存中
INSERT INTO books (title, author, price) VALUES ('PostgreSQL魔法师', '数据麦克数据库', 29.99);

-- 更新库存数量
UPDATE inventory SET stock = stock + 100 WHERE book_id = (SELECT id FROM books WHERE title = 'PostgreSQL魔法师');

-- 哦哦!我们意识到我们在定价上犯了一个错误
UPDATE books SET price = 24.99 WHERE title = 'PostgreSQL魔法师';

-- 一切看起来都不错,让我们使这些更改永久生效
COMMIT;

在这个事务中,我们:

  1. 将一本新书添加到我们的目录中
  2. 更新库存以显示我们有100本库存
  3. 意识到我们定的书价太高并调整了价格

因为我们使用了事务,所有这些更改都是一起发生的。如果其中任何一部分失败(也许是因为库存表被锁定等原因),那么任何更改都不会生效。这确保了我们的数据库保持一致性,我们的书店顺利运营!

如果出了问题怎么办?

让我们看看一个需要使用ROLLBACK的场景:

BEGIN;

-- 尝试更新一本书的价格
UPDATE books SET price = 19.99 WHERE title = 'PostgreSQL魔法师';

-- 哦不!我们刚刚发现这本书已经绝版
-- 我们不想更新我们无法销售的书的价钱

ROLLBACK;

在这里,我们开始更新一本书的价格,但随后意识到我们根本不应该销售这本书。通过使用ROLLBACK,我们确保数据库不做任何更改。就像是整个事务从未发生!

总结

好了,各位!你们刚刚迈出了进入PostgreSQL事务世界的第一步。请记住:

  • BEGIN开始你的事务
  • COMMIT保存你的更改
  • ROLLBACK是你的“撤销”按钮

事务就像是你们数据库操作的保险网。它们确保即使在计划不如意的情况下,你们的数据也能保持一致性。

随着你们在PostgreSQL旅程上的继续,你们会发现事务成为你们最好的朋友。它们会让你们晚上睡得更安心,知道你们的数据库操作是安全可靠的。

继续练习,保持好奇心,不久之后,你们自己也会成为PostgreSQL的魔法师!祝你们编码愉快,愿你们的交易总是能够成功COMMIT!

Credits: Image by storyset