和RDBMS一样,OrientDB支持事务ACID属性。 事务包括在数据库管理系统内执行的工作单元。 在数据库环境中维护事务有两个主要原因。
- 即使系统发生故障,也可以从故障中同时进行恢复并保持数据库的一致性。
- 在同时访问数据库的程序之间提供隔离。
默认情况下,数据库事务必须遵循ACID属性,例如Atomic,Consistent,Isolated和Durable属性。 但OrientDB是一个符合ACID的数据库,这意味着它不会抵触或否定ACID的概念,但它在处理NoSQL数据库时会改变它的看法。 看看ACID属性如何与NoSQL数据库一起使用。
- 原子性 - 当你做一些事情来改变数据库时,改变应该作为一个整体来工作或失败。
- 一致性 - 数据库应该保持一致。
- 隔离性 - 如果其他事务执行同时执行,则用户将无法在并发执行中查看记录。
- 持久性 - 如果系统崩溃(硬件或软件),数据库本身应该能够进行备份。
数据库事务可以通过使用Commit
和 Rollback
命令来实现。
提交
提交意味着通过保存对数据库的所有更改来关闭事务。 回滚意味着将数据库状态恢复到您打开事务的位置。以下语句是COMMIT
数据库命令的基本语法。
COMMIT
注 - 只有在连接到特定数据库并开始事务后,才能使用此命令。
示例
在本例中,将使用本教程前面章节中创建的名为demo
的相同数据库。将看到提交事务的操作并使用事务来存储记录。
需要使用以下BEGIN
命令首先启动事务。
orientdb {db = demo}> BEGIN
使用以下命令将记录值为id = 12
和name = Maxsu
插入到Employee
表中。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'Maxsu')
可以使用以下命令来提交事务。
orientdb> commit
如果此事务成功提交,将获得以下输出。
Transaction 2 has been committed in 4ms
回滚
回滚意味着将数据库状态恢复到您打开事务的位置。
以下语句是ROLLBACK
数据库命令的基本语法。
ROLLBACK
注 - 只有在连接到特定数据库并开始事务后,才能使用此命令。
示例
在这个例子中,将使用本教程前面章节中创建的名为demo
的相同数据库。 将看到回滚事务的操作并使用事务来存储记录。
先使用以下BEGIN
命令启动事务。
orientdb {db = demo}> BEGIN
使用以下命令将记录值为id = 12
和name = Maxsu
插入到employee
表中。
orientdb> INSERT INTO employee (id, name) VALUES (12, 'Maxsu')
可以使用以下命令来检索employee
表中的记录。
orientdb> SELECT FROM employee WHERE name LIKE '%su'
如果此命令成功执行,您将获得以下输出。
---+-------+--------------------
# | ID | name
---+-------+--------------------
0 | 12 | Maxsu
---+-------+--------------------
1 item(s) found. Query executed in 0.076 sec(s).
可以使用以下命令来回滚此事务。
orientdb> ROLLBACK
再次使用select
查询语句从Employee
表中检索相同的记录。
orientdb> SELECT FROM employee WHERE name LIKE '%su'
如果此命令成功执行,您将获得以下输出。
0 item(s) found. Query executed in 0.037 sec(s).
可以看到,上面插入的数据已被回滚了,所以没有查询到相关记录信息。