一、mysql事務 資料庫中的事務是指對資料庫執行一批操作,在同一個事務當中,這些操作最終要麼全部執行成功,要麼全部失敗,不會存在部分成功的情況。MySQL 事務主要用於處理操作量大,複雜度高的數據。 事物的幾個特征:原子性、一致性、隔離性、持久性。 (1).原子性:一個事務(transaction ...
一、mysql事務
資料庫中的事務是指對資料庫執行一批操作,在同一個事務當中,這些操作最終要麼全部執行成功,要麼全部失敗,不會存在部分成功的情況。
MySQL 事務主要用於處理操作量大,複雜度高的數據。
事物的幾個特征:原子性、一致性、隔離性、持久性。
(1).原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
(2).一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。
(3).隔離性:資料庫允許多個併發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重覆讀(repeatable read)和串列化(Serializable)。
(4).持久性:事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。
事物的操作:
開啟事務:start transaction;
回滾:rollback;
提交:commit;
註意:事務的執行過程如下,以 begin 或者 start transaction 開始,然後執行一系列操作,最後要執行 commit 操作,事務才算結束。當然,如果進行回滾操作(rollback),事務也會結束。
二、觸發器
觸發器:在指定表上,(insert(插入)、update(修改)、delete(刪除))事件動作,觸發(After(之後)時機,Before(之前)),執行指定的一群或一個sql語句
#創建觸發器
DELIMITER $ CREATE TRIGGER ins_stu AFTER INSERT ON student FOR EACH ROW BEGIN INSERT INTO cj1( NUMBER,stu_id,stu_name,math,chinese,english )VALUES(1,new.stuid,new.username,88,88,88); END $ DELIMITER ; INSERT INTO student(username,PASSWORD,birthday) VALUES('張三','321321','2016-08-23');
上述實例表示:當在ins_stu表每插入數據時會自動觸發執行begin後的sql語句,其中new.stuid和new.username是插入ins_stu表數據時的id和姓名
三、存儲過程
存儲過程(Stored Procedure)是一種在資料庫中存儲複雜程式,以便外部程式調用的一種資料庫對象。
存儲過程是為了完成特定功能的SQL語句集,經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。
存儲過程思想上很簡單,就是資料庫 SQL 語言層面的代碼封裝與重用。
#創建存儲過程 DELIMITER $ CREATE PROCEDURE test1() BEGIN SELECT * FROM student; SELECT * FROM cj; UPDATE student SET PASSWORD='456456' WHERE username='李四'; END $ DELIMITER ;
#調用存儲過程call CALL test1(); DELIMITER $ CREATE PROCEDURE test2() BEGIN #聲明變數類型declare DECLARE un VARCHAR(32) DEFAULT''; #給un變數賦值 SET un='xiaoxiao'; #將查詢結果賦值給un變數 SELECT username INTO un FROM student WHERE stuid=3; #查詢un變數 SELECT un; END $ DELIMITER ; CALL test2(); DELIMITER $ CREATE PROCEDURE test2() BEGIN BEGIN #聲明變數類型declare DECLARE un VARCHAR(32) DEFAULT''; #給un變數賦值 SET un='xiaoxiao'; #將查詢結果賦值給un變數 SELECT username INTO un FROM student WHERE stuid=3; #查詢un變數 SELECT un; END; BEGIN #聲明變數類型declare DECLARE un2 VARCHAR(32) DEFAULT''; #給un變數賦值 SET un2='xiaoxiao'; #將查詢結果賦值給un變數 SELECT username INTO un2 FROM student WHERE stuid=5; #查詢un變數 SELECT un2; END; END $ DELIMITER ; CALL test2();