一、事務 回顧什麼是事務?一個不可分割的子操作形成一個整體,該整體要麼全部執行成功,要麼全部執行失敗。例如:轉帳回顧為什麼要用事務?如果不用事務的話,為轉帳為例,可能出現一個用戶錢增加了,另一個用戶錢不變回顧編程中,事務可用於哪一層?事務放在業務層回顧jdbc編程中,如何使用事務?connectio ...
一、事務
回顧什麼是事務?
一個不可分割的子操作形成一個整體,該整體要麼全部執行成功,要麼全部執行失敗。例如:轉帳
回顧為什麼要用事務?
如果不用事務的話,為轉帳為例,可能出現一個用戶錢增加了,另一個用戶錢不變
回顧編程中,事務可用於哪一層?
事務放在業務層
回顧jdbc編程中,如何使用事務?
connection.setAutoCommit(false);
pstmt.executeUpdate();
connection.commit();
connection.rollback();
回顧hibernate編程中,如何使用事務?
transaction.begin();
session.save(new User());
transaction.commit();
transaction.rollback();
回顧spring編程中,如何使用事務?
spring可以分為二種
>編程式事務,藕合
>聲明式事務,解藕,提倡
Oracle的事務只針對DML操作,即select/insert/update/delete
回顧MySQL的事務開始:start transaction
Oracle的事務開始:第一條DML操作做為事務開始
Oracle的提交事務
(1)顯示提交:commit
(2)隱藏提交:DDL/DCL/exit(sqlplus工具)
註意:提交是的從事務開始到事務提交中間的內容,提交到ORCL資料庫中的DBF二進位文件
Oracle的回滾事務
(1)顯示回滾:rollback
(2)隱藏回滾:關閉視窗(sqlplus工具),死機,掉電
註意:回滾到事務開始的地方
回顧什麼是回滾點?
在操作之間設置的一個標誌位,用於將來回滾之用
回顧為什麼要設置回滾點?savepoint a;rollback to savepoint a;
如果沒有設置回滾點的話,Oracle必須回滾到事務開始的地方,其間做的一個正確的操作也將撤銷
/*使用savepoint 回滾點,設置回滾點a */ savepoint a; /*使用rollback to savepoint,回滾到回滾點a處*/ rollback to savepoint a;
Oracle提交或回滾後,原來設置的回滾點還有效嗎?
原回滾點無效了
Oracle之所以能回滾的原因是?
主要機制是實例池
回顧MySQL支持的四種事務隔離級別及能夠解決的問題
(1)read uncommitted -- 不能解決任何缺點
(2)read committed -- 臟讀,Oracle預設
(3)reapatable read -- 不可重覆讀,臟讀,MySQL預設
(4)serializable -- 幻讀,不可重覆讀,臟讀,效率低
註意:jdbc/dbutils速度快,但書寫煩
mybaits速度中等,但書寫"中等"
hibernate速度慢,但書寫"爽"
Oracle支持的二種事務隔離級別及能夠解決的問題?
Oracle支持:read committed 和 serializable
Oracle中設置事務隔離級別為serializable?
set transaction isolation level serializable;
演示二個用戶同時操作emp表,刪除KING這條記錄,會有什麼後果?
因為有隔離級別的存在,所以不會出現二個用戶都刪除了KING這條記錄,
一定是一個用戶刪除KING成功,在該用戶沒有提交的情況下,另一個用戶等待
二、訪問其他用戶下的對象
在預設情況下,每個用戶只能查詢自已空間下的對象的許可權,不能查詢其它用戶空間下的對象,這時候,如何訪問其他用戶下麵的對象就顯得有用武之地了。
聲明:scott或hr叫用戶名/方案名/空間名 scott--tiger hr-----lion /*查詢當前用戶是誰*/ show user; /*查詢scott自己表空間下的所有對象時,可加,或不加用戶名select * from emp;*/ select * from emp; 或 select * from scott.emp; /*以sysdba身份解鎖hr普通帳戶*/ alter user hr account unlock; /*以sysdba身份設置hr普通帳戶的密碼*/ alter user hr identified by lion; /*當scott查詢hr表空間下的所有表時,必須得加用戶名*/ select * from hr.jobs; /*以sysdba身份角色,授予scott用戶查詢所有用戶空間下的對象許可權*/ grant select any table to scott; /*以sysdba身份,撤銷scott用戶查詢所有用戶空間下的對象許可權*/ revoke select any table from scott; /*scott自已查看自己所擁有的許可權*/ select * from user_sys_privs; /*從scott用戶空間導航到sysdba用戶空間*/ conn / as sysdba; /*從sysdba用戶空間導航到scott用戶空間*/ conn scott/tiger; /*從scott用戶空間導航到hr用戶空間*/ conn hr/lion; /*查詢hr用戶空間中的所有對象*/ select * from tab; /*從hr用戶空間導航到scott用戶空間*/ conn scott/tiger; /*在scott用戶空間下,查詢hr用戶空間下的jobs表,必須加上hr用戶空間名*/ select * from hr.jobs;