定義:簡而言之是乙個sql或者是多個sql的操作集,在執行過程中,要麼都成功,要麼都失敗
特點 :事務有四大特性:原子性(整個事務包含的sql要麼都執行成功,要麼都失敗)
一致性(資料庫在事務執行前與執行後是一致的,資料能夠對的上
)隔離性(多個事務之間不相互影 響)
永續性(事務一旦完成,對資料庫的影響是永續性的,不會因為資料庫故障丟失事務)
事務併發問題: 髒讀:乙個事務a讀取了另乙個事務b未提交的資料,事務b回滾,會造成a讀了額外的資料(髒資料)
幻讀:事務a查資料庫,發現沒有該記錄,於是插入該記錄,結果事務b早一步插入,感覺事務a是在幻讀
不可重複讀:事務a多次查詢資料庫,事務b在多次查詢過程更改了資料表,造成事務a多次讀取結果不一致
事務隔離鎖級別:
事務隔離級別
髒讀
不可重複讀
幻讀
read-uncommitted
允許允許
允許read-committed
不允許允許
允許repeatable-read
不允許不允許
允許serializable
不允許不允許
不允許其他:mysql中實現了事務的引擎有: innodb , bdb
事務sql例項:
建表:
create table `users` (
`id` int(11) unsigned not null auto_increment,
`name` varchar(255) collate utf8_unicode_ci default null,
`pass` varchar(255) collate utf8_unicode_ci not null,
`created_at` timestamp not null default '2018-01-01 00:00:00',
primary key (`id`)
) engine=innodb default charset=utf8 collate=utf8_unicode_ci;
create table `institution_users` (
`id` int(11) unsigned not null auto_increment,
`institution_id` int(11) unsigned,
`user_id` int(11) unsigned,
`created_at` timestamp not null default '2018-01-01 00:00:00',
primary key (`id`)
) engine=innodb default charset=utf8 collate=utf8_unicode_ci;
事務插入資料:
begin;
insert into users(name,pass,created_at) values('test_user','123456',now());
set @my = (select last_insert_id() as user_id);
insert into institution_users(institution_id,user_id,created_at) values(170,@my,now());
commit;
-- 如果報錯,手動rollback
-- rollback;
事務(一) 事務概念入門
事務 transaction 是由一系列對系統中資料進行訪問與更新的操作所組成的乙個程式執行線邏輯單元 是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全...
MySQL事務(一) 事務簡介
事務是資料庫操作的最小工作單元,是一組不可再分割的操作集合,要麼全部執行,要麼全部失敗。在mysql中,事務是一組具有原子性的sql語句,一組 sql 語句要麼全部執行,要麼全部不執行。事務支援是在引擎層實現的,只有使用了 innodb 資料庫引擎的資料庫或表才支援事務,myisam引擎不支援事務,...
一 事務的操作
事務是指使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,它是乙個不可分割的工作單位。乙個事務可以是一條sql語句,一組sql語句,或整個程式。public bool transactionop 開始事務 transaction cn.begintransaction cmd.transa...