事务

hubble支持将多个SQL语句在单个事务中提交。每个事务都能保证在集群中跨多表的ACID特性。当一个事务成功,则所有都确保其成功。如果事务的任何部分失败,整个事务将中止,数据库将保持不变。hubble保证当一个事务处于挂起状态时,它通过可serializable isolation事务级别,将其与其他他并发事务中隔离出来

事务隔离级别

hubble使用最高等级的事务隔离级别,即SERIALIZABLE。其他ANSI事务隔离级别,如SNAPSHOT,READ UNCOMMITTED,READ COMMITED,和REPEATABLE READ将自动升级为SERIALIZABLE

SERIALIZABLE事务隔离级别,能确保执行期间,不受其他任何任务的影响。这意味着hubble提供最强大的隔离级别。

事务开启、提交与回滚

一个事务可以用BEGINCOMMIT语句包裹。用户可以在一个事务中,对若干操作进行事务控制。其使用方式如下:

BEGIN;
<transction statements>
COMMIT;

只要在未提交前,使用ROLLBACK语句即可中止事务。

事务操作

hubble 事务支持的操作如下:

  • 写事务操作:INSERTUPDATEDELETE
  • 读事务操作:QUERY

hubble的其它操作(如:创建表、创建索引等其它非 CRUD 操作)不在事务功能的考虑范围。

事务优先级

在hubble中,每个事务都有默认优先级,默认为NORMAL,但是对于在高竞争情况下应该给予优先级的事务,客户端可以在BEGIN语句中设置优先级:

begin priority <low | normal | high>;

客户端可以查看当前事务的优先级

show transaction priority;