一、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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455540.html
標籤:其他
