當前位置:首頁 » 編程語言 » 加事務會讓sql停止嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

加事務會讓sql停止嗎

發布時間: 2022-05-19 22:05:25

Ⅰ 若有事務正在進行,則無法關閉資料庫,可以通過快速關閉資料庫的方式。

停止oracle server
命令:shutdown [normal|transactional|immediate|abort]

參數說明:
normal:等待用戶斷開已存在連接,系統發出檢查點,然後在同步數據文件、控制文和重做日誌文件之後關閉(默認選項)。
transactional:等待客戶端結束事務之後,自動斷開用戶連接,然後再執行normal。
immediate:取消當前所有sql語句,回退所有未完成事務,然後自動斷開,再執行normal。
abort:終止所有sql語句,立即終止實例。不會發出檢查點,所以也就不會去同步數據文件、控制文件和重做日誌文件。

在這里,你可以使用命令:shutdown immediate

Ⅱ 開啟了事務,在sql出錯的時候不執行commit,也沒執行rollback的話,會出現什麼情況

有可能出現死鎖。
因為在對表做更新操作的時候,就會在表上加鎖,事務沒提交,鎖是不會釋放的,這是資料庫為了保證數據完整性的操作。那麼在某個程序寫資料庫表的時候,其他任何程序對該表是無法進行讀取和寫入的,處於等待狀態。
如果出現了循環等待,A等B,B等C,C等A那麼就出現了死鎖。

Ⅲ 使用事務為什麼會使sql得到優化

1. 在長時間運行的查詢和短查詢中使用事務

如果預期有一個長時間運行的查詢,並且有大量的數據輸出時,開發者就應該在BEGIN TRAN 和END TRAN之間使用事務。

這樣事務會在緩沖區緩存為獨立事務,並會被分配特定內存,以此來提高處理速度。

2. 不要使用SELECT *

如果使用SELECT * 來選擇表中的所有記錄,那麼一些不必要的記錄也被讀取、緩存,增加了磁碟的I/O和內存消耗。

3. 避免在WHERE子句中使用顯式或隱式函數,比如Convert ()

4. 避免在觸發器中執行長時間的操作

5. 適當使用臨時表和表變數

當結果集較小的時候,請盡量使用表變數;當結果集相當大時,使用臨時表。

6. 使用連接(JOIN)代替子查詢(Sub-Queries)

子查詢通常作為內聯代碼來使用,而連接(JOIN)則作為表來使用,這樣速度會更快。所以,應盡量避免在連接中使用子查詢。

7. 連接條件中表的順序

在連接條件中,應盡量首先使用較小的表,然後逐步使用較大的表。

8. 循環優化

如果操作在循環內部沒有任何影響,那麼應盡量將操作放到循環外面,這樣可以減少不必要的重復工作。因為,SQL Server優化器不會自動識別這種低效率的代碼,更不會自動優化(其他一些語言的編譯器可以)。

9. 參數探測

不要在正執行的SP(存儲過程)中使用SP參數,這樣會導致參數探測(Parameter Sniffing)。應該在聲明和設置後再使用SP參數。由於這個原因,SP的行為在每次運行期間都不相同。

10. 當使用條件語句時,可以使用Index(索引)Hint(提示)

比如在SQL Server 2008中,可以使用Index hint,也可以使用fixed plan hint強制在查詢中使用hint,以提高運行速度。

Ⅳ 事務在SQL中有什麼作用

事務的好處在於,當你需要對多個表進行相關性操作時,使用BeginTrans()開啟事務,然後操作,如果中間哪個表更新出錯了,或者數據有問題,你可以用RollBack()方法在取消之前的相關性操作,如果沒有錯,那就使用Commit()方法提交你的修改。另外,在這個過程中,所有你改動的內容只對你自己有效,別人不能知道你改了什麼,也不能對你正在改的表做修改,直到你提交之後,別人才能修改這些表,檢索出你修改過的內容。

Ⅳ 沒有使用事務,SQL會產生鎖嗎

沒有使用事務,SQL會產生鎖嗎
會。 鎖是系統自動加的,根據並發情況、各會話的操作類型、各會話訪問的數據范圍情況等來決定。 有時候鎖還會升級(擴大鎖定范圍,或者提高鎖的級別)。

Ⅵ 在SQL執行事務操作的時候的問題

默認的話是使用完畢後就釋放的,當然,如果人為設置了事務的隔離級別,可以參考sql幫助文檔的介紹:

語法
SET TRANSACTION ISOLATION LEVEL
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}

參數
READ COMMITTED

指定在讀取數據時控制共享鎖以避免臟讀,但數據可在事務結束前更改,從而產生不可重復讀取或幻像數據。該選項是 SQL Server 的默認值。

READ UNCOMMITTED

執行臟讀或 0 級隔離鎖定,這表示不發出共享鎖,也不接受排它鎖。當設置該選項時,可以對數據執行未提交讀或臟讀;在事務結束前可以更改數據內的數值,行也可以出現在數據集中或從數據集消失。該選項的作用與在事務內所有語句中的所有表上設置 NOLOCK 相同。這是四個隔離級別中限制最小的級別。

REPEATABLE READ

鎖定查詢中使用的所有數據以防止其他用戶更新數據,但是其他用戶可以將新的幻像行插入數據集,且幻像行包括在當前事務的後續讀取中。因為並發低於默認隔離級別,所以應只在必要時才使用該選項。

SERIALIZABLE

在數據集上放置一個范圍鎖,以防止其他用戶在事務完成之前更新數據集或將行插入數據集內。這是四個隔離級別中限制最大的級別。因為並發級別較低,所以應只在必要時才使用該選項。該選項的作用與在事務內所有 SELECT 語句中的所有表上設置 HOLDLOCK 相同。

注釋
一次只能設置這些選項中的一個,而且設置的選項將一直對那個連接保持有效,直到顯式更改該選項為止。這是默認行為,除非在語句的 FROM 子句中在表級上指定優化選項。

SET TRANSACTION ISOLATION LEVEL 的設置是在執行或運行時設置,而不是在分析時設置。

Ⅶ sql的事務問題

如果沒有猜錯,樓主應該是在執行COMMIT TRANSACTION tran3 後,直接在當前的查詢界面查看的表裡的數據吧?對於當前會話,即使你沒有執行COMMIT,所有數據都會在當前的會話里發生變化,你可以不執行COMMIT TRANSACTION tran3,直接查看錶里的數據,你會看到即使沒有提交任何事物,表裡的數據還是發生變化了。如果你再打開一個查詢窗口,你會發現直接從testtran 表裡select數據是會一直等待的,因為其它會話(也就是開始你執行begin tran那個會話)有事務沒有提交,表是鎖定的。事務是用來保證多個會話之間不會應為事務不一致而產生臟數據。對同一會話,是看不出效果的。

Ⅷ 關於SQL資料庫的事務處理

如果只對一個表操作,可以採用adLockBatchOptimistic模式,即:
rs.open sql語句,連接,adOpenKeyset,adLockBatchOptimistic
更新的時候不需要事務處理,而是:
do while not rs.eof
rs.edit
rs.fields(...).value=...
rs.update
rs.movenext
loop
rs.updatebatch

Ⅸ SQL 查詢能使用事務嘛合適嘛

事務,就是要麼全部執行,要麼全部不執行。

事務開始

插入表A一個欄位B (主鍵 int 標識 自動增)

<-- 假如這里意外發生了,那麼 最終 A 表不會多一條數據。

然後查詢出 這個表A的 欄位B的值

插入附屬表E 關聯欄位C (int )

<-- 假如這里意外發生了,那麼 最終 A 表 E 表 不會多數據。

結束事務

<-- 假如這里意外發生了,那麼 最終 A 表 E 表,還是有數據的。

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

對於 Oracle 資料庫來說:

事務開始
插入表A一個欄位B (主鍵 int 標識 自動增)

-- 這個時候,只有你,能查詢到你剛才新增的那條記錄。
-- 你新增的,未提交的數據,其他人是看不到的。

然後查詢出 這個表A的 欄位B的值

插入附屬表E 關聯欄位C (int )

-- 這個時候,未提交, 你新增的 表A與表E的數據,只有你這個會話能看到
-- 別人看不到。

結束事務

-- 事務提交以後,別人
SELECT * FROM A
SELECT * FROM E
能夠看到你剛才插入的數據了。

============================
還是Oracle

事務是通過 一種叫 undo 的機制來處理的。

比如
事務開始
插入表A一個欄位B (主鍵 int 標識 自動增)

-- 將數據寫入到 表A的存儲區域
-- 同時記錄 undo 信息, 就是針對你的 INSERT INTO A ... 的SQL
-- undo 的 SQL 是 DELETE FROM A WHERE B=...

然後查詢出 這個表A的 欄位B的值

插入附屬表E 關聯欄位C (int )

-- 將數據寫入到 表E的存儲區域
-- 同時記錄 undo 信息, 就是針對你的 INSERT INTO E ... 的SQL
-- undo 的 SQL 是 DELETE FROM E WHERE C=...

-- 假如這個時候,伺服器重新啟動了
-- 那麼下次伺服器啟動的時候,將把沒有提交的事務 undo掉
-- 也就是執行前面的
-- DELETE FROM A WHERE B=...
-- DELETE FROM E WHERE C=...

結束事務

-- 這個時候,提交事務了,也就是 Commit 了。
-- 將 SCN ( System Change Number)遞增
-- 通過將 SCN 遞增,使得 別的用戶,可以訪問到你新增加的數據。
-- 前面所使用的 undo 空間,將騰出來,給別的用戶使用。