1、 什麼是事務
事務就是一段
sql
語句的批處理,可是這個批處理
是一個
atom
(原子) ,不可分割,要麼都執行,要
麼回滾(
rollbac
k
)都不執行。
2、爲何出現這種技術
爲何要使用事務這個技術呢? 如今的不少軟件都是多用戶,多程序,多線程的,對同一個表可能同時有不少人在用,爲保持數據的一致性,因此提出了事務的概念。這樣很抽象,舉個例子:
A
給
B
要劃錢,
A
的帳戶
-1000
元,
B
的帳戶就要
+1000
元,這兩個
update
語句必須做爲一個總體來執行,否則
A
扣錢了,
B
沒有加錢這種狀況很難處理(找出緣由)。
3、如何在
MYSQL
中使用事務
1
、誰可使用
只有
InnoDB /BDB
的之類的
transaction_safe table
才能支持。
默認的
engine MyISAM
是不支持事務的,
show engine
能夠看到支持的和默認的
engine
。能夠在
[mysqld]
加入:
default_storage_engine=InnoDB; InnoDB
就是創建表的默認引擎
。
創建
InnoDB
表
:Create table .... type=InnoDB; Alter table table_name type=InnoDB;(如何查看已有表的類型: show create table table_name)
這樣咱們就能夠在InnoDB
表上進行事務操做了!
二、如何使用
上面是很好藥引子啊 直接搬過來了
接着:
二、如何使用
前提:這個要理解這句話喲!!!咱們剛學mysql增刪改查的時候,按下enter鍵時候,語句是自動提交的,也就是說mysql默認autocommit=1
a、用begin,rollback,commit來實現php
- begin開始一個事務
- rollback事務回滾
- commit事務確認
b、直接用 SET 來改變 MySQL 的自動提交模式:html
- set autocommit=0 禁止自動提交
- set autocommit=1 開啓自動提交
演示開啓事務:
mysql> CREATE TABLE test ( id int primary key auto_increment ) engine=innodb;
mysql> insert test values (1);
mysql> begin;
mysql> insert test values (2);
mysql> commit;
mysql> select * from test;
//顯示 兩個記錄 1 2
mysql> begin;
mysql> insert test values (3);
mysql> insert test values (4);
mysql> rollback; // 上面的兩個語句都不會產生影響 被回滾了
mysql> commit;
mysql> select * from test;
//顯示 兩個記錄 1 2