事務 唯讀事務

2021-09-12 05:48:48 字數 1632 閱讀 5506

[b]沒有事務[/b]:保證了sql語句級別的讀一致性。

即在一條sql語句執行期間,它只會看到執行前點的資料狀態,而不會看到執行期間資料被其他sql改變的狀態。

存在的問題:比如你做乙個報表查詢,在執行完第一條sql的時候,執行第二條查詢sql,而這個之間有資料被改變了,第二條資料查詢就有可能不一致

[b]唯讀事務[/b]:保證了事務級別的讀一致性

在該事務範圍內執行的多條sql都只會看到執行前點的資料狀態,而不會看到事務期間的任何被其他 sql改變的狀態。

唯讀事務可以解決沒有事務導致的一致性問題。

舉例:建表:

create table `t_pai` (

`id` bigint(20) not null auto_increment,

`name` varchar(10) not null,

`update_time` timestamp not null default current_timestamp on update current_timestamp comment '更新時間',

primary key (`id`),

key `idx_update_time` (`update_time`)

) engine=innodb auto_increment=46 default charset=utf8

客戶端1:

set autocommit =1;

insert into t_pai(name,update_time) values ("1",now());

select sleep(10) from dual;

insert into t_pai(name,update_time) values ("2",now());

select sleep(5) from dual;

insert into t_pai(name,update_time) values ("3",now());

select sleep(2) from dual;

insert into t_pai(name,update_time) values ("4",now());

select sleep(2) from dual;

insert into t_pai(name,update_time) values ("5",now());

select sleep(2) from dual;

commit;

客戶端2:

先執行:

start transaction read only;

select * from t_pai;

反覆執行:

select * from t_pai;

輸出:查詢不到資料。

客戶端3:

select * from t_pai;

反覆執行,可以看到資料一條一條的插入,資料一致性被破壞

oracle唯讀事務

一致性讀是oracle區別於其他資料庫的重要特點之一,但一般來說,這個一致性讀是sql級別的,只針對單個sql有效。由於業務邏輯需要,我們可能需要在乙個事務中的多個sql也能實現讀一致性,也就是說,資料來源在事務開始時就定下來了,不受其他會話影響。oracle的唯讀事務可以實現這個功能,它可以在事務...

唯讀事務和沒有事務

在專案中看到 transactional readonly true 註解 該屬性用於設定當前事務是否為唯讀事務,設定為 true 表示唯讀,false 則表示可讀寫,預設值為 false 例如 transactional readonly true 了解到是唯讀事務,網上搜了下唯讀事務和沒有事務的...

mysql 設定唯讀事務 Spring 唯讀事務

transactional readonly true 這東西不叫唯讀事務,它只是建立了乙個唯讀的資料庫連線。transactional裡面還有個引數,叫isolation這個才是控制隔離級別的。spring提供了5種事務隔離級別予以解決 1 default預設級別 default為資料來源 資料庫...