當前位置:首頁 » 編程語言 » sql刪除表鎖定
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql刪除表鎖定

發布時間: 2023-01-19 01:02:12

A. 如何用sql語言刪除一個表

DROP命令。

1、drop table xx --xx是數據表的名字

作用:刪除內容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增數據是不可能的,除非新增一個表。

2、 drop table test,就是把整個表 移除.裡面的數據都消失

比如下面有一個[FusionChartsDB]資料庫中的test表。

B. SQL如何直接批量刪除表

SQL直接批量刪除表的方法步驟:


所需工具原料:phpmyadmin。


1.數據操作前進行數據備份。

4.打開文本框中輸入命定執行:


deletefromwp_postswhere`post_date`>='2010-01-0100:00:00'and`post_date`<'2014-12-1422:00:00:00'。


【命令語句意思】:從wp_posts數據表的post_date欄位中檢索文章創建日期在2010年1月1日0時和2014年12月14日22時之間的數據進行刪除操作。


5.成功後點擊上部「瀏覽」按鈕查看,表被刪除,sql執行語句成功。


刪除指令解析:

1.全部刪除:deletefromtable。

2.部分刪除:deletefromtableawherenuidin(selectnuidfromtableB)。


注意事項:

1.進行資料庫操作前須要進行資料庫備份。


2.資料庫操作是刪除數據文本,圖片等上傳文件不會受到影響。

C. SQL 怎樣刪除有外鍵約束的表

1、自動生成所有的DROP語句,將其中的MyDatabaseName替換成你的資料庫名稱:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')

FROM information_schema.tables

WHERE table_schema = 'MyDatabaseName';

2、然後,在生成的代碼前後添加下面設置FOREIGN_KEY_CHECKS變數的語句:

SET FOREIGN_KEY_CHECKS = 0

-- DROP語句

SET FOREIGN_KEY_CHECKS = 1;

(3)sql刪除表鎖定擴展閱讀:

外鍵約束可雙擊關系線添加外鍵約束,外鍵約束有四種不同的選項:CASCADE, SET NULL, NO ACTION, RESTRICT。

1、CASCADE : 從父表中刪除或更新對應的行,同時自動的刪除或更新自表中匹配的行。[ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。]

2、SET NULL: 從父表中刪除或更新對應的行,同時將子表中的外鍵列設為空。[注意,這些在外鍵列沒有被設為NOT NULL時才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。]

3、NO ACTION: InnoDB拒絕刪除或者更新父表。

4、RESTRICT: 拒絕刪除或者更新父表。[指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE選項的效果是一樣的。]

D. SQL刪除資料庫中的所有數據

Sql Server中清空所有數據表中的記錄
清空所有數據表中的記錄:
復制代碼 代碼如下:
exec sp_msforeachtable @Command1 ='truncate table ?'

刪除所有數據表:
復制代碼 代碼如下:
exec sp_msforeachtable 'delete N''?'''

清空SQL Server資料庫中所有表數據的方法(有約束的情況)
其實刪除資料庫中數據的方法並不復雜,為什麼我還要多此一舉呢,一是我這里介紹的是刪除資料庫的所有數據,因為數據之間可能形成相互約束關系,刪除操作可能陷入死循環,二是這里使用了微軟未正式公開的sp_MSForEachTable存儲過程。
也許很多讀者朋友都經歷過這樣的事情:要在開發資料庫基礎上清理一個空庫,但由於對資料庫結構缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的資料庫結構是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。
說道刪除數據記錄,往往馬上會想到的是delete和truncate語句,但在遇到在兩個或多個表之間存在約束的話,這兩個語句可能都會失效,而且最要命的是這兩個命令都只能一次操作一個表。那麼真正遇到要刪除SQL Server資料庫中所有記錄時,該怎麼辦呢?有兩個選擇:
1.按照先後順序逐個刪除,這個方法在表非常多的情況下顯得很不現實,即便是表數量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關系,然後找出先刪哪個表,再刪哪個表,最後又刪哪個表。
2.禁用所有約束,刪除所有數據,最後再啟用約束,這樣就不用花時間和精力去研究什麼約束了,只需要編寫一個簡單的存儲過程就可以自動完成這個任務。
復制代碼 代碼如下:

CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO

從這兩個選擇中不難看出第二個選擇是最簡單有效的了,那麼在使用第二個選擇時,具體該怎麼實施呢?
首先得編寫代碼循環檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發人員也許都還未曾聽說,所以你在互聯網上搜索得到的解決辦法大多很復雜,也許有的人會認為,既然沒有官方文檔,這個存儲過程可能會不穩定,打心理上會排斥它,但事實並非如此。下面來先看一個完整的腳本
這個腳本創建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發器,第三條語句才是真正地刪除所有數據,接下里的語句分別還原約束和觸發器,最後一條語句是顯示每個表中的記錄,當然這條語句也可以不要,我只是想確認一下是否清空了所有表而已。
你可以在任何資料庫上運行這個存儲過程,當然不要在生成資料庫上運行,可別怪我沒告訴你!不管怎樣,還是先備份一下資料庫,使用備份資料庫還原,然後再運行該存儲過程,呵呵,即使是一個大型資料庫,也要不多長時間,你的資料庫就成一個空庫了

第三種方法:TRUNCATE TABLE

在sql server資料庫中快速刪除記錄,清空表若要刪除表中的所有行,則 TRUNCATE TABLE 語句是一種快速、無日誌記錄的方法。TRUNCATE TABLE 與不含有 WHERE 子句的 DELETE 語句在功能上相同。但是,TRUNCATE TABLE 速度更快,並且使用更少的系統資源和事務日誌資源。

與 DELETE 語句相比,TRUNCATE TABLE 具有以下優點:

所用的事務日誌空間較少。

DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放用於存儲表數據的數據頁來刪除數據,並且在事務日誌中只記錄頁釋放。

使用的鎖通常較少。

當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。

如無例外,在表中不會留有任何頁。

執行 DELETE 語句後,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對於索引,刪除操作會留下一些空頁,盡管這些頁會通過後台清除進程迅速釋放。

與 DELETE 語句相同,使用 TRUNCATE TABLE 清空的表的定義與其索引和其他關聯對象一起保留在資料庫中。

E. sqlserver怎麼清除死鎖

查詢語句的表名後加(nolock)少用臨時表和group by HAVING。

F. sql怎麼刪除資料庫表

資料庫刪除語句如下:

1、delete。基礎用法:delete from table(表名)。這個用於刪除有明確定義的數據或者整個表的數據。比如:id是唯一不可重復的,delete from Student where id=5,即把id=5的唯一的一條數據刪除。

2、rop基礎用法:drop table +表名稱、drop database +資料庫名稱、drop index +索引名稱、drop view +視圖名稱(*在不同資料庫中寫法不一定是一樣的),只針對刪除表來說,delete用於刪除整個表的數據以及結構。即把整個表徹底刪除,表中的數據和欄位等等全部被刪除。

3、truncate基礎用法:truncate table +表名稱。刪除表中的全部數據,包括佔用的id也會全部清除。表結構不會改變,一般來說想重新往表中導入數據,就會用到這個方法。

資料庫刪除語句的注意事項。

用delete語句刪除掉的數據,原本的被佔用id並不會被刪除。意思是你刪除掉了id中1-10的數據,你再往裡加數據,id就是從11開始。所以有些不太熟練資料庫的入門者,就可能會看到id斷斷續續(1,5,7,8,11)排序,有可能是因為使用了detele刪除了某些數據。在刪除數據之前,可以使用SELECT語句對DELETE語句中的WHERE子句進行測試,這樣可以對即將刪除的數據進行驗證,保證不會勿刪。

G. SQL Server表鎖定原理以及如何解除鎖定

SELECT resource_type, request_mode, resource_description WHERE resource_type 'DATABASE' order by request_modeROLLBACK TRAN 6. Bulk Update locks (BU) 資料庫引擎在將數據大容量復制到表中時使用了大容量更新 (BU) 鎖, 並指定了 TABLOCK 提示或使用 sp_tableoption 設置了 table lock on bulk load 表選項. 大容量更新鎖(BU 鎖)允許多個線程將數據並發地大容量載入到同一表, 同時防止其他不進行大容量載入數據的進程訪問該表. 7. Key - Range locks 在使用可序列化事務隔離級別時, 對於 Transact-SQL 語句讀取的記錄集, 鍵范圍鎖可以隱式保護該記錄集中包含的行范圍. 鍵范圍鎖可防止幻讀. 通過保護行之間鍵的范圍, 它還防止對事務訪問的記錄集進行幻像插入或刪除. 二: 死鎖與死鎖解除 1. 死鎖 使用或管理資料庫都不可避免的涉及到死鎖. 一旦發生死鎖, 數據相互等待對方資源的釋放,會阻止對數據的訪問, 嚴重會造成DB掛掉. 當資源被鎖定, 無法被訪問時, 可以終止訪問DB的那個session來達到解鎖的目的(即 Kill掉造成鎖的那個進程). 在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現死鎖。 例如: 事務A 獲取了行 1 的共享鎖。 事務B 獲取了行 2 的共享鎖。 現在,事務 A 請求行 2 的排他鎖,但在事務 B 完成並釋放其對行 2 持有的共享鎖之前被阻塞。 現在,事務 B 請求行 1 的排他鎖,但在事務 A 完成並釋放其對行 1 持有的共享鎖之前被阻塞。 事務B 完成之後事務 A 才能完成,但是事務 B 由事務 A 阻塞。該條件也稱為循環依賴關系: 事務 A 依賴於事務 B,事務 B 通過對事務 A 的依賴關系關閉循環。 除非某個外部進程斷開死鎖,否則死鎖中的兩個事務都將無限期等待下去。 Microsoft SQL Server 資料庫引擎死鎖監視器定期檢查陷入死鎖的任務。 如果監視器檢測到循環依賴關系,將選擇其中一個任務作為犧牲品,然後終止其事務並提示錯誤。 這樣,其他任務就可以完成其事務。 對於事務以錯誤終止的應用程序,它還可以重試該事務,但通常要等到與它一起陷入死鎖的其他事務完成後執行。 2. 死鎖檢測 2.1 SQL Server 資料庫引擎自動檢測 SQL Server 中的死鎖循環。資料庫引擎選擇一個會話作為死鎖犧牲品,然後終止當前事務(出現錯誤)來打斷死鎖。 2.2 查看DMV: sys.dm_tran_locks 2.3 SQL Server Profiler能夠直觀的顯示死鎖的圖形事件. 三: 鎖兼容性 鎖兼容性控制多個事務能否同時獲取同一資源上的鎖。 如果資源已被另一事務鎖定,則僅當請求鎖的模式與現有鎖的模式相兼容時,才會授予新的鎖請求。 如果請求鎖的模式與現有鎖的模式不兼容,則請求新鎖的事務將等待釋放現有鎖或等待鎖超時間隔過期。 例如,沒有與排他鎖兼容的鎖模式。 如果具有排他鎖(X 鎖),則在釋放排他鎖(X 鎖)之前,其他事務均無法獲取該資源的任何類型(共享、更新或排他)的鎖。 另一種情況是,如果共享鎖(S 鎖)已應用到資源,則即使第一個事務尚未完成,其他事務也可以獲取該項的共享鎖或更新鎖(U 鎖)。 但是,在釋放共享鎖之前,其他事務無法獲取排他鎖。

H. 求sql語句:informix 創建、刪除、鎖定 資料庫用戶

informix直接刪除唯一索引的語法:
drop index 索引名 ;

可做如下測試:

1、創建表:
create table tab_yzh_test_01
(
proct_id decimal(20,0),
proct_no varchar(40),
cust_level varchar(10)
);
2、創建唯一索引:

create unique index idx_tab_yzh_test_01_01 on tab_yzh_test_01(proct_id);

3、刪除唯一索引:

drop index idx_tab_yzh_test_01_01 ;

I. SQL中 如何刪除約束

1、首先找到要操作的表,右鍵單擊選擇設計選項

J. SQL中怎樣通過鎖機制,使表的第一行不允許被刪除

鎖是一種機制,不是事務,實現不了。
可以用觸發器實現。
不知道你所謂的表的第一行是怎麼定義的,假設是主鍵為1的行吧

create trigger tr_name on table
instead of delete
as
begin
delete table from table inner join deleted on ....(主鍵關聯)
where deleted.主鍵!=1
end

關聯之後排除第一行就可以了