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;
=======================
備份和恢復數據庫
一、備份數據庫
二、恢復數據庫