MySQL事務_transaction

1、 什麼是事務
事務就是一段 sql  語句的批處理,可是這個批處理 是一個 atom (原子) ,不可分割,要麼都執行,要 麼回滾( rollbac k )都不執行。
2、爲何出現這種技術
爲何要使用事務這個技術呢? 如今的不少軟件都是多用戶,多程序,多線程的,對同一個表可能同時有不少人在用,爲保持數據的一致性,因此提出了事務的概念。這樣很抽象,舉個例子: 
要劃錢, 的帳戶 -1000 元,  的帳戶就要 +1000 元,這兩個 update  語句必須做爲一個總體來執行,否則 扣錢了, 沒有加錢這種狀況很難處理(找出緣由)。
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 
相關文章
相關標籤/搜索