用户登录

TRANSACTION,事务或者交易。SurrealDB 在执行每一条 SurealQL 语句的时候都会创建一个单独的事务,如果执行成功,就会确定提交这次事务,如果声明修改了数据,这些修改也就会生效。如果执行失败了,就会取消事务,对数据的修改也就不会生效。

如果我们要执行一系列的声明,这些声明相互依赖,我们可以把它们组织到一个事务里,这样如果全部声明都被成功执行了,就会确定对数据的修改,如果遇到了问题,数据会回滚到之前的样子。也就是要么一起成功,确定修改,要么就一块失败,好像什么也没有发生一样。

重启 SurrealDB 服务,清空一下数据。在 HTTP 客户端,复制一个请求,名字改成“使用事务”。

这里先用 DEFINE FIELD 定义一个 name 字段,这个字段在 user 这个表里面,把字段的类型设置成 string,然后 ASSERT 这个字段的值不等于 NONE。先执行一下,再注释掉这行声明。

BEGIN,COMMIT

开始一个事务,可以使用 BEGIN TRANSACTION; 事务的结尾,用一下 COMMIT TRANSACTION。在它们之间的东西就是在这个事务里要执行的声明。

先用 CREATE 创建一条 post 数据,id 是 post:1 ,SET 一下 content 属性,设置一下它的值。然后再添加一条声明,用 CREATE 创建一个 user 数据,id 是 user:libai。

然后用 UPDATE 更新一下 post:1,MERGE ,一个对象,里面添加一个 user 属性,值是 user:libai。 执行一下这组声明,得到的响应会提示 The query was not executed due to a failed transaction。意思就是这条声明没能成功被执行,是因为在事务里有执行失败的声明。

这是因为创建这条 user 数据的时候,没有设置 name 这个属性的值,所以这条声明就没能成功执行,Surreal 会回滚整个事务里的声明对数据的修改,恢复成原来的样子。

可以执行一下 SELECT * FROM post; 在这个 post 表里还没有数据记录。

下面再修改一下这个事务里的声明,在 SET 后面,把 name 这个属性的值设置成 '李白',再执行一下。

成功执行了这个事务里的所有声明,对数据的修改也就生效了,你会看到这里提示先创建了一个内容数据,然后创建了一个用户数据,又修改了一下之前创建的这个内容数据。

SurrealQL:使用事务(BEGIN, COMMIT)《 SurrealDB 多模型数据库:查询语言 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点