https://www.yiibai.com/sql

比较全面

事务就是对数据库执行的工作单元。事务是完成逻辑顺序的工作,无论是在手动方式由用户或者自动地通过某种数据库程序的序列的单元。

事务是一个或多个数据库更改传输。例如,如果创建一个记录或更新记录或删除记录在表上,那么在这个表上可进行事务。重要的是事务控制,以确保数据的完整性和处理数据库错误。

实际上,将很多SQL查询集到一个组,将执行所有这些一起作为事务的一部分。

事务特性:

事务具有以下四个标准属性,通常由首字母缩写ACID简称:

  • 原子: 确保工作单元中的所有操作都成功完成; 否则,该事务被中止的故障点,操作回滚到操作之前的状态。

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

  • 隔离: 事务操作彼此独立和透明。

  • 持久性: 可确保提交的事务的结果或仍然存在系统故障的情况下的作用。

事务控制:

用来控制事务有如下命令:

  • COMMIT: 保存更改。

  • ROLLBACK: 回滚更改。

  • SAVEPOINT: 回滚事务组创建点

  • SET TRANSACTION: 事务放置的名称。

事务控制指令只能用DML命令使用INSERT,UPDATE和DELETE只。它们不能在创建表或删除它们,因为这些操作都是自动提交到数据库中。

COMMIT命令:

COMMIT命令是用于保存由事务引用的数据库改变的事务命令。

COMMIT命令保存所有事务在数据库自上次COMMIT或ROLLBACK命令。

COMMIT命令的语法如下:

COMMIT;

例子:

考虑CUSTOMERS表具有以下记录:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+

以下会从表中删除age = 25的记录,然后提交更改在数据库中的例子。

SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> COMMIT;

作为结果,表2中行数据会被删除,SELECT语句将产生以下结果:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+

ROLLBACK命令:

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

ROLLBACK命令只能撤消事务,因为发出的最后一个COMMIT或ROLLBACK命令。

ROLLBACK命令的语法如下:

ROLLBACK;

例子:

考虑CUSTOMERS表具有以下记录:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+

下面是示例,将删除表中age = 25 的记录,然后回滚改变在数据库中。

SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> ROLLBACK;

其结果是,删除操作不会影响表中数据,使用SELECT语句将产生以下结果:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+

SAVEPOINT命令:

保存点SAVEPOINT是,可以回滚事务到某一事务节点,而不回滚整个事务。

SAVEPOINT命令的语法如下:

SAVEPOINT SAVEPOINT_NAME;

该命令只有在创建中的事务的SAVEPOINT语句中使用。ROLLBACK命令用来取消一组事务。

回滚到SAVEPOINT的语法如下:

ROLLBACK TO SAVEPOINT_NAME;

以下是打算从CUSTOMERS表中删除这三个不同的记录的一个例子。在每个删除之前创建的保存点SAVEPOINT, 这样就可以回滚到任何SAVEPOINT,并随时在适当时将数据返回到其原始状态:

例子:

考虑CUSTOMERS表具有以下记录:

+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+

现在,这里是一系列操作:

SQL> SAVEPOINT SP1;
Saveyiibai created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Saveyiibai created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Saveyiibai created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

现在,这三个删除已经发生,假设你要改变主意,决定回滚到标识为SP2的SAVEPOINT。 由于SP2在之后第一个删除被创建,最后两个删除都被撤消:

SQL> ROLLBACK TO SP2;
Rollback complete.

请注意,只有第一个删除发生,因为它回滚到SP2:

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

RELEASE SAVEPOINT命令:

RELEASE SAVEPOINT命令用于删除已经创建的一个SAVEPOINT。

RELEASE SAVEPOINT的语法如下:

RELEASE SAVEPOINT SAVEPOINT_NAME;

一旦保存点已被释放,使用ROLLBACK命令不能再撤消自SAVEPOINT进行事务。

SET TRANSACTION 命令:

SET TRANSACTION命令可以被用来启动一个数据库事务。该命令用于指定随后的事务特性。

例如,可以指定一个事务是只读的,或读写。

SET TRANSACTION的语法如下:

SET TRANSACTION [ READ WRITE | READ ONLY ];

SQL用法总全的更多相关文章

  1. Sql Server函数全解<五>之系统函数

    原文:Sql Server函数全解<五>之系统函数  系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些 ...

  2. Sql Server函数全解<四>日期和时间函数

    原文:Sql Server函数全解<四>日期和时间函数   日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外, ...

  3. ORACLE SQL性能优化(全)

    ORACLE SQL性能优化(全) http://wenku.baidu.com/view/b2aaba3887c24028915fc337.html

  4. SQL Server数据全同步及价值分析[终结版]

    SQL Server数据全同步[终结版] 版权全部.转载请注明出处.谢谢! 经过两天的同步编写和測试.出了第一个Release版本号: 1. 本函数仅支持单向同步.即从一个主数据库想多个从数据库同步 ...

  5. SQL 优化,全

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的SQL语句,要设 ...

  6. PL/SQL 自动补全[转]

    1.新建 shortcuts.txt 内容如下: s = SELECT t.* FROM t w = WHERE b = BETWEEN AND l = LIKE '%%' o = ORDER BY ...

  7. [SQL]会引起全表扫描的10种SQL语句

    1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的 ...

  8. sql server重建全库索引和更新全库统计信息通用脚本

    重建全库索引: exec sp_msforeachtable 'DBCC DBREINDEX(''?'')' 更新全库统计信息: --更新全部统计信息 exec sp_updatestats 实例反馈 ...

  9. SQL优化 | 避免全表扫描

    1. 对返回的行无任何限定条件,即没有where 子句 2. 未对数据表与任何索引主列相对应的行限定条件 例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用 ...

随机推荐

  1. java boolean 值在内存中占几位?

      java boolean 值在内存中占几位?    <Java虚拟机规范>中这样描述:虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟机中没有任何供 ...

  2. MongoDB数据库安装及配置环境(windows10系统)

    windows10系统下MongoDB的安装及环境配置: MongoDB的安装 下载地址: https://www.mongodb.com/download-center (这是windows10环境 ...

  3. 实现serializable接口的作用

    最重要的两个原因是: 1.将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本: 2.按值将对象从一个应用程序域发送至另一个应用程序域. 实现serializable接口的作用是就是可以 ...

  4. ThinkPHP执行调用存储过程添加日志

    本文出至:新太潮流网络博客 //PHP代码部分 /** * [LogAdd 操作日志] * @param [string] $userid [用户的ID] * @param [string] $typ ...

  5. Axure响应式进阶

    Axure响应式进阶 2018年6月2日luodonggan 随大屏幕分辨率普及,网页设计在交互阶段就必须考虑响应式方案,Axure7作为我偏爱的交互设计工具果然也没让大家失望的新增了Adaptive ...

  6. 安装Window Server 2008的些配置

    上次安装window server2008,由于server2008需要设置很多东西,不然用起来很不爽,就说IE吧,每次随便打开一个网页都要弹出n多窗口出来叫你添加到信任域里面!太烦人了![下面有解决 ...

  7. Oracle诊断工具 - ORA-2730x Troubleshooting Tool

    通常情况下,ORA-27300 ORA-27301 ORA-27302错误的原因是操作系统的系统调用错误或者操作系统配置问题,错误格式:ORA-27300: OS system dependent o ...

  8. Struts-config.xml配置文件《action-mappings》元素的详解

    原文地址:http://blog.163.com/sara1124@126/blog/static/11291097020105125537114/ action-mappings 该元素用于将Act ...

  9. iOS8 CIGlassDistortion滤镜的使用

    iOS8 CIGlassDistortion滤镜的使用 此为CoreImage滤镜的使用 素材 效果 混合用图片 源码: // // ViewController.m // CIGlass // // ...

  10. UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流

    1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. ...