事务孤立级别,也称为事务隔离级别,是指在多个事务同时存在,并都有可能改变数据库中的数据时,事务内外对数据访问的状态。在集算器中,事务是指在同一个数据库连接中所执行的SQL语言。
一般情况下,只有事务中执行TCL时才会执行把数据提交到数据库或回滚等操作。但是,当事务中执行DDL时,实际上相当于在事务中执行了提交,会把当前未保存的数据存储到数据库中。如执行了一条create table的语句,在数据库中添加了一个新表,此时就相当于执行了一次commit操作。
事务孤立级别可以分为以下四个等级:
(1) 读取提交内容(Read Committed)。这是大多数数据库默认的事务孤立级别,一个事务只能看到已经提交的改变。
(2) 读取未提交内容(Read Uncommitted)。在这种孤立级别下,所有事务都能看到其它事务未提交的执行结果。这种状况下,事务中读到的结果有可能不是最终的结果,这被称为脏读。
(3) 可重读(Repeatable Read)。在这种孤立级别下,同一事务的多个并行实例可以看到相同的数据。在这种状况下,不同的实例可能相互影响,出现“幻读”的现象。
(4) 可串行化(Serializable)。这是最高的孤立级别,此时会强制事务排序,使之不会发生相互冲突,但也会带来最低的效率,有可能出现超时现象或者共享锁竞争。
在集算器中,可以在用connect函数连接数据库时,添加选项,指定不同的事务孤立级别:@c表示Read Committed,@u表示Read Uncommitted,@r表示Repeatable Read,@s表示Serializable。
对于已经存在的数据库连接,也可以用db.isolate() 函数,获取当前事务孤立级别,并添加选项改变数据库连接的事务孤立级别。