非专业见解的数据库事务 我不是女神ヾ 2022-05-30 00:16 68阅读 0赞 ##### SQL 事务 ##### 事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。 事务实际上就是对数据库的一个或者多个更改。当你在某张表上创建更新或者删除记录的时,你就已经在使用事务了。控制事务以保证数据完整性,并对数据库错误做出处理,对数据库来说非常重要。 实践中,通常会将很多 SQL 查询组合在一起,并将其作为某个事务一部分来执行。 事务的属性: 事务具有以下四个标准属性,通常用缩略词 ACID 来表示: 原子性:保证任务中的所有操作都执行完毕;否则,事务会在出现错误时终止,并回滚之前所有操作到原始状态。 一致性:如果事务成功执行,则数据库的状态得到了进行了正确的转变。 隔离性:保证不同的事务相互独立、透明地执行。 持久性:即使出现系统故障,之前成功执行的事务的结果也会持久存在。 事务控制: 有四个命令用于控制事务: COMMIT:提交更改; ROLLBACK:回滚更改; SAVEPOINT:在事务内部创建一系列可以 ROLLBACK 的还原点; SET TRANSACTION:命名事务; > COMMIT 命令: COMMIT 命令用于保存事务对数据库所做的更改。 COMMIT 命令会将自上次 COMMIT 命令或者 ROLLBACK 命令执行以来所有的事务都保存到数据库中。 示例: 考虑 CUSTOMERS 表,表中的记录如下所示: <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Ramesh</td> <td>32</td> <td>Ahmedabad</td> <td align="right">2000.00</td> </tr> <tr> <td>2</td> <td>Khilan</td> <td>25</td> <td>Delhi</td> <td align="right">1500.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>4</td> <td>Chaitali</td> <td>25</td> <td>Mumbai</td> <td align="right">6500.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> 下面的示例将会删除表中 age=25 的记录,然后将更改提交(COMMIT)到数据库中。 SQL> DELETE FROM CUSTOMERS WHERE AGE = 25; SQL> COMMIT; 上述语句将会从表中删除两行记录,再执行 SELECT 语句将会得到如下结果: <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Ramesh</td> <td>32</td> <td>Ahmedabad</td> <td align="right">2000.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> > ROLLBACK 命令: ROLLBACK 命令用于撤销尚未保存到数据库中的事务。 ROLLBACK 命令只能撤销自上次 COMMIT 命令或者 ROLLBACK 命令执行以来的事务。 示例: 考虑 CUSTOMERS 表,表中的记录如下所示: <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Ramesh</td> <td>32</td> <td>Ahmedabad</td> <td align="right">2000.00</td> </tr> <tr> <td>2</td> <td>Khilan</td> <td>25</td> <td>Delhi</td> <td align="right">1500.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>4</td> <td>Chaitali</td> <td>25</td> <td>Mumbai</td> <td align="right">6500.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> 下面的示例将会从表中删除所有 age=25 的记录,然后回滚(ROLLBACK)对数据库所做的更改。 SQL> DELETE FROM CUSTOMERS WHERE AGE = 25; SQL> ROLLBACK; 结果是删除操作并不会对数据库产生影响。现在,执行 SELECT 语句将会得到如下结果: <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Ramesh</td> <td>32</td> <td>Ahmedabad</td> <td align="right">2000.00</td> </tr> <tr> <td>2</td> <td>Khilan</td> <td>25</td> <td>Delhi</td> <td align="right">1500.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>4</td> <td>Chaitali</td> <td>25</td> <td>Mumbai</td> <td align="right">6500.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> > SAVEPOINT 命令: SAVEPOINT 是事务中的一个状态点,使得我们可以将事务回滚至特定的点,而不是将整个事务都撤销。 SAVEPOINT 命令的记录如下所示: SAVEPOINT SAVEPOINT_NAME; 该命令只能在事务语句之间创建保存点(SAVEPOINT)。ROLLBACK 命令可以用于撤销一系列的事务。 回滚至某一保存点的语法如下所示: ROLLBACK TO SAVEPOINT_NAME; 下面的示例中,你计划从 CUSTOMERS 表中删除三条不同的记录,并在每次删除之前创建一个保存点(SAVEPOINT),从而使得你可以在任何任何时候回滚到任意的保存点,以恢复数据至其原始状态。 示例: 考虑 CUSTOMERS 表,表中的记录如下所示: <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Ramesh</td> <td>32</td> <td>Ahmedabad</td> <td align="right">2000.00</td> </tr> <tr> <td>2</td> <td>Khilan</td> <td>25</td> <td>Delhi</td> <td align="right">1500.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>4</td> <td>Chaitali</td> <td>25</td> <td>Mumbai</td> <td align="right">6500.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> 操作序列如下所示: SQL> SAVEPOINT SP1; Savepoint created. SQL> DELETE FROM CUSTOMERS WHERE ID=1; 1 row deleted. SQL> SAVEPOINT SP2; Savepoint created. SQL> DELETE FROM CUSTOMERS WHERE ID=2; 1 row deleted. SQL> SAVEPOINT SP3; Savepoint created. SQL> DELETE FROM CUSTOMERS WHERE ID=3; 1 row deleted. 现在,三次删除操作已经生效了,如果此时你改变主意决定回滚至名字为 SP2 的保存点,由于 SP2 于第一次删除操作之后创建,所以后两次删除操作将会被撤销。 SQL> ROLLBACK TO SP2; Rollback complete. 注意,由于你将数据库回滚至 SP2,所以只有第一次删除真正起效了: SQL> SELECT * FROM CUSTOMERS; <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>ADDRESS</th> <th align="right">SALARY</th> </tr> </thead> <tbody> <tr> <td>2</td> <td>Khilan</td> <td>25</td> <td>Delhi</td> <td align="right">1500.00</td> </tr> <tr> <td>3</td> <td>kaushik</td> <td>23</td> <td>Kota</td> <td align="right">2000.00</td> </tr> <tr> <td>4</td> <td>Chaitali</td> <td>25</td> <td>Mumbai</td> <td align="right">6500.00</td> </tr> <tr> <td>5</td> <td>Hardik</td> <td>27</td> <td>Bhopal</td> <td align="right">8500.00</td> </tr> <tr> <td>6</td> <td>Komal</td> <td>22</td> <td>MP</td> <td align="right">4500.00</td> </tr> <tr> <td>7</td> <td>Muffy</td> <td>24</td> <td>Indore</td> <td align="right">10000.00</td> </tr> </tbody> </table> > RELEASE SAVEPOINT 命令: RELEASE SAVEPOINT 命令用于删除先前创建的保存点。 RELEASE SAVEPOINT 的语法如下所示: RELEASE SAVEPOINT SAVEPOINT_NAME; 保存点一旦被释放,你就不能够再用 ROLLBACK 命令来撤销该保存点之后的事务了。 > SET TRANSACTION 命令: SET TRANSACTION 命令可以用来初始化数据库事务,指定随后的事务的各种特征。 例如,你可以将某个事务指定为只读或者读写。 SET TRANSACTION 命令的语法如下所示: SET TRANSACTION [ READ WRITE | READ ONLY ];
相关 数据库的事务 数据库的事务(Transaction)是一种用于管理数据库操作的机制,它确保一组相关操作作为一个不可分割的工作单元执行,以确保数据的一致性和完整性。事务通常由一系列数据库操作组 爱被打了一巴掌/ 2024年02月05日 17:00/ 0 赞/ 44 阅读
相关 数据库事务理解,事务 事务:(transaction)进阶 事务:保证用户操作数据库的安全的机制(转账) 例子: A账号 B账户 A账户 ----> 500元----->B账户 \\1 「爱情、让人受尽委屈。」/ 2023年10月10日 15:46/ 0 赞/ 124 阅读
相关 关于二分法的个人见解 关于二分法的一些理解 一般而言,我们在使用二分法的时候通常定义一个`low`一个`high`然后去求`mid`,在此就出现了第一个问题: 1. 如何保证在求取过程 我会带着你远行/ 2022年12月23日 11:22/ 0 赞/ 181 阅读
相关 非专业学生如何系统的学习计算机编程? 大家好,我是程序员吴师兄,一个坚持在 CSDN 日更原创的程序员。 前几天我的一篇文章[为什么有人劝别选计算机专业?][Link 1] 上了 CSDN 热榜第一的文章,在此感 阳光穿透心脏的1/2处/ 2022年10月07日 05:46/ 0 赞/ 242 阅读
相关 数据库事务(1)数据库事务的特性以及 并发事务引起的问题 事务的4大特性(ACID): 原子性(Atomicity) : 事务是 数据库 的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。 一致性(Cons 柔情只为你懂/ 2022年09月25日 06:24/ 0 赞/ 207 阅读
相关 非专业见解的数据库事务 SQL 事务 事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。 事务实际上就是对数据库的一个或者多个更改。当你在 我不是女神ヾ/ 2022年05月30日 00:16/ 0 赞/ 69 阅读
相关 数据库的事务 问题: 数据库的事务,四个性质说一下,分别有什么用,怎么实现的? 一、数据库的事务性质 1、原子性(Atomicity): 事务的原子性指的是,事务中包含的程序 今天药忘吃喽~/ 2022年05月15日 04:19/ 0 赞/ 233 阅读
相关 BOM和DOM的见解 JavaScript: javascript 有三部分构成,ECMAScript,DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他 痛定思痛。/ 2021年12月15日 00:27/ 0 赞/ 332 阅读
相关 学习方法的个人见解 转自:[https://my.oschina.net/leejayblog/blog/32747][https_my.oschina.net_leejayblog_blog_3 雨点打透心脏的1/2处/ 2021年09月16日 09:48/ 0 赞/ 368 阅读
还没有评论,来说两句吧...