MySQL TRANSACTION 事務

TRANSACTION 事務數據庫

事務一般包含一系列更新操做,函數

這些更新操做是一個不可分割的邏輯工做單元。事務

若是事務成功執行,那麼該事務中全部的更新操做都會成功執行、ci

並將執行結果提交到數據庫文件中,成爲數據庫永久的組成部分。開發

若是事務中某條更新操做執行失敗,那麼事務中的全部操做均被撤銷。get

 

 

ACID(事務的四大特性)it

 

原子性(Atomicity):io

事務是一個不可分割的工做單元,變量

事務中的操做要麼所有COMMIT提交成功,date

要麼所有失敗ROLLBACK回滾。

 

一致性(Consistency):

數據庫老是從一個一致性的狀態轉換到另外一個一致性的狀態。

隔離性(Isolation)

一個事務所作的修改在最終提交之前,對其餘事務是不可見的。

持久性(Durability)

事務一旦被提交,它對數據庫中數據的改變就是永久性的,

接下來即便數據庫發生故障也不該該對其有任何影響。

 

 

方法一:顯示地關閉自動提交

使用MySQL命令「set autocommit=0;」,能夠顯示地關閉MySQL自動提交。

 

方法二:隱式地關閉自動提交

使用MySQL命令「start transaction;」能夠隱式地關閉自動提交。

隱式地關閉自動提交,不會修改系統會話變量@@autocommit的值。

 

 

關閉MySQL自動提交後,數據庫開發人員能夠根據須要回滾(也叫撤銷)更新操做

 

 

MySQL自動提交一旦關閉,數據庫開發人員須要「提交」更新語句,

才能將更新結果提交到數據庫文件中,

成爲數據庫永久的組成部分。自動提交關閉後,

MySQL的提交方式分爲顯示地提交與隱式地提交。

 

顯示地提交:MySQL自動提交關閉後,

使用MySQL命令「commit;」能夠顯示地提交更新語句。

隱式地提交:MySQL自動提交關閉後,

使用下面的MySQL語句,能夠隱式地提交更新語句。

 

USE wlw;

 

CREATE TABLE syslog

(

id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,

sysdatetime VARCHAR(11)

);

 

SET autocommit = 0;

#在insert update delete 中均可以使用用戶自定義函數

INSERT INTO syslog(sysdatetime) VALUES(get_sysdate());

SELECT * FROM syslog;

 

 

SELECT @@autocommit;

 

========================

SELECT * FROM syslog;

 

插入的數據沒有進表

START TRANSACTION ;

INSERT INTO syslog(sysdatetime) VALUES(get_sysdate());

DELETE FROM syslog;

ROLLBACK; #回滾

 

插入的數據持久進表 ,永久性改變

START TRANSACTION ;

INSERT INTO syslog(sysdatetime) VALUES(get_sysdate());

DELETE FROM syslog;

COMMIT;

 

SELECT * FROM syslog;

 

=========================

START TRANSACTION ;

SET @kz=0;

.....

....

SET @kz=1;

....

IF @kz=0 THEN

COMMIT;

ELSE

ROLLBACK;

END IF;

=======================

備份和恢復數據庫

一、備份數據庫

二、恢復數據庫

相關文章
相關標籤/搜索