本文介绍 OceanBase 数据库常用的开启事务 SQL 语句及示例。
语句语法格式
OceanBase 数据库的事务控制语句与 MySQL 数据库兼容,开启事务可以通过以下方式来完成。
以 OceanBase 数据库 MySQL 模式为例,数据库在执行以下语句时会开启一个事务。
执行
BEGIN命令。BEGIN; //开启事务 INSERT INTO table1 VALUES(1,1); COMMIT;执行
START TRANSACTION命令。START TRANSACTION; //开启事务 INSERT INTO table1 VALUES(1,1); COMMIT;配置
autocommit = 0时(关闭自动提交),INSERT、UPDATE、DELETE、SELECT FOR UPDATE系统会默认开启一个新事务。SET AUTOCOMMIT=0; INSERT INTO table1 VALUES(1,1); //开启事务 COMMIT; SET AUTOCOMMIT=0; UPDATE table1 SET id = 2 WHERE id = 1; //开启事务 COMMIT; SET AUTOCOMMIT=0; DELETE FROM table1 WHERE id = 2; //开启事务 COMMIT; SET AUTOCOMMIT=0; SELECT id FROM table1 WHERE id = 1 FOR UPDATE; //开启事务 COMMIT;
当事务开启时,OceanBase 数据库为事务分配一个事务 ID,用于唯一的标识一个事务。
在实际使用中,多个并发的连接下,对同一个数据表进行操作时,可能会出现两个事务对同一行数据进行操作。对于查询的读操作,可以通过 SELECT FOR UPDATE 语句锁定查询结果,避免其他 DML 语句对该笔记录进行同时修改。语句的详细使用方法,请参见 锁定查询结果 SELECT FOR UPDATE。
示例:开启一个事务
以下示例中,先通过 SET autocommit=0 关闭自动提交功能,再通过 UPDATE 语句开启了一个事务。
obclient> SET autocommit=0;
Query OK, 0 rows affected
obclient> UPDATE t SET c="b" WHERE i=1;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
可以使用 oceanbase.__all_virtual_trans_stat 查询事务的状态。
obclient> SELECT trans_id FROM oceanbase.__all_virtual_trans_stat;
+-----------------------------------------------------------------------------------------+
| trans_id |
+-----------------------------------------------------------------------------------------+
| {hash:1724204239025989****, inc:9****, addr:"100.88.*.*:24974", t:163263662353****} |
+-----------------------------------------------------------------------------------------+「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




