A. sql資料庫中 怎麼刪除一個表中的部分數據 這些數據是另一個表中的外碼
在外鍵表建立的時候需要定義外鍵允許「集聯刪除」。否則刪除父表數據的時候,會報外鍵無法刪除的錯誤。
B. sql資料庫delete刪除後怎麼恢復
通過oracle提供的回閃功能,
C. sql server刪除主表的一條數據,外鍵表的數據全沒了
--使用SYSREFERENCES
--刪除外鍵
set xact_abort on
begin tran
DECLARE @SQL VARCHAR(99)
DECLARE CUR_FK CURSOR LOCAL FOR
SELECT 'alter table ['+ OBJECT_NAME(FKEYID) + '] drop constraint ' + OBJECT_NAME(CONSTID) FROM SYSREFERENCES
--刪除所有外鍵
OPEN CUR_FK
FETCH CUR_FK INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_FK INTO @SQL
END
CLOSE CUR_FK
DEALLOCATE CUR_FK
-- 刪除拆腔所有表
DECLARE CUR_TAB CURSOR LOCAL FOR
SELECT 'DROP TABLE '+ NAME FROM SYSOBJECTS WHERE XTYPE='U' -- AND NAME LIKE 'xx%'
OPEN CUR_TAB
FETCH CUR_TAB INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_TAB INTO @SQL
END
CLOSE CUR_TAB
DEALLOCATE CUR_TAB
commit tran
--使用sys.foreign_keys
--disable and enable 外鍵
這里解釋下 { CHECK | NOCHECK } CONSTRAINT
Specifies that constraint_name is enabled or disabled. This option can only be used with FOREIGN KEY and CHECK constraints. When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.
上面的解釋是,NOCHECK對應於disable, CHECK則對應於enable
select
'ALTER TABLE '+o.name+' NOCHECK CONSTRAINT '+fk.name+';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id=o.object_id)
具體會有多少條記錄,取決於你的資料庫裡面,有多少個外鍵了。
然後復制梁慧結果, 粘貼旅渣衫出來執行. 就停用 外鍵約束了.
再刪除數據
數據刪除好了, 再啟用外鍵約束
select
'ALTER TABLE ' + o.name + ' CHECK CONSTRAINT ' + fk.name + ';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id = o.object_id)
和前面的一樣, 把查詢出來的結果, 復制一下, 然後粘貼出來去執行.
--使用sys.foreign_key_columns
--查出外鍵
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
--刪除外鍵
alter table 表名 drop constraint 外簡名
D. 刪除操作時,資料庫[SQL]中的外鍵是怎麼處理的
建立表悄磨的外鍵關系時,下面有個可選的項,臘運孝輪稿問你是否級聯刪除,如果你選中了,則刪除信息時就會自動的把他關聯的信息刪除。如果沒有選,那麼在刪除時,系統是拒絕你做刪除的
E. SQL 當某欄位所關聯的外鍵被刪除時如何清空該欄位
學生表的學生編號欄位是成績段盯表的外鍵,這樣的情況只有在更新成績表的時候,才會映射更新到學生表,反之,如果想更新學生表的時候更新成績表,那麼只要將成績表的編號欄位設置為學生表的外鍵就行了, 你的是成績表引用學握舉和生表,所以當你更新學生表時,成績表沒有引用到更新的學生表就為Null 了,如果你改為學生表引用成績表,即學生表中有成績表編號欄位引答鋒用成績表,這樣就可以更新學生表的同時映射更新成績表了 ~
F. 如何用sql語句刪除外鍵約束
用sql語句刪除外鍵約束的具體步驟如下:
我們需要准備的材料分別是:電腦、SQL SERVER 2008。
1、首先我們用SQL SERVER 2008打開需要刪除外鍵約束的表,滑鼠右鍵點擊左側的「dbo」選項選擇「設擊」。
G. SQL 問題! 用代碼刪除 外碼約束~~
由於在創建表的過程中沒有指定外鍵約束名稱,SQL SERVER會自動生成外鍵約束名
執行
exec sp_fkeys 課程
在結果集中,將FK_NAME的值復制出來,形如「FK__選課__課程號__50FB042B」
然後執行
alter table 選課
drop constraint FK__選課__課程號__50FB042B」
刪除外鍵約束,
之後就可以刪除「課程」表了。
H. sql server怎樣刪除外鍵約束
1.首先,我們使用SQLSERVER2008打開需要刪除外鍵約束的表,點擊左側的「dbo」通道項,選擇「setclick」。
注意事項:
可以雙擊鍵約束來添加外鍵約束,它有四個不同的選項:CASCADE、SETNULL、NOACTION、restricted。
1.級聯:刪除或更新父表中相應的行,並自動刪除或更新表中匹配的行。[在刪除CANSCADE和更新CANSCADE都支持InnoDB。
2.SETNULL:刪除或更新父表中對應的行,並將子表中的外鍵列設置為空。注意,這些外鍵列沒有設置為NOTNULL。InnoDB支持刪除集空值和更新集空值。
3.無操作:InnoDB拒絕刪除或更新父表。
4.限制:拒絕刪除或更新父表。
I. 關於SQL Server的主、外鍵記錄刪除問題!!!高手入~~~
如果你可以調整那個外鍵為 DELETE CASCADE 方式。
刪除主表敬缺逗 同時亮賣刪除扮肆子表數據的工作,就完全讓 SQL Server 去處理了,你不需要寫額外的代碼了。
J. sql server資料庫被刪除了怎麼辦
使用Log Explorer查看和恢復數據
Log Explorer 4.1.可用於SQL Server2005的日誌查看工具
下載地址:
http://download.csdn.net/source/620271
使用方法:
打開Log Explorer -> Attach Log File -> 選擇SQL Server伺服器和登陸方式 -> Connect ->
在Database Name中選擇資料庫 -> Attach-> 左面對話框中Browse-> View Log-> 就可以看到log記錄了
想恢復的話: 右鍵Log記錄 Undo Transation-> 選擇保存文件名和路徑-> 然後打開該文件到查詢分析器里執行
T-sql代碼就可以了
例如 如果Log是delete table where ...的話,生成的文件代碼就是insert table ....
然後將此insert table的代碼放到查詢分析器里執行.就可以恢復數據.
----------------------------------------------------------------------
--如何恢復被delete/update的數據
----------------------------------------------------------------------
1連接到被刪除資料庫的Db
打開log explorer 選擇 "file"->"attach log file"->選擇伺服器和登陸方式->"connect"->選擇"資料庫"->"attach"
2 查看日誌
在左面操作項目的對話框中選擇"browse"項目->"view log"->就可以看到當前的Log記錄了
3 恢復數據
右鍵某一條log記錄,選擇"undo transation"->"選擇保存文件名和路徑"->然後打開該文件到查詢分析器里執行
T-sql代碼就可以了
例如: 如果log是delete table where ...的話,生成的文件代碼就是insert table ....
----------------------------------------------------------------------
--Log Explorer恢復被drop table和truncate table後的數據
----------------------------------------------------------------------
1 連接到被刪除資料庫的Db
操作同上
2 恢復方法
1) 選擇"salvaage dropped/truncate"菜單,在右邊的對話框中選擇表名,和droped/trucated的日期,
File Name中選擇生成insert語句腳步的存放位置,condition選擇是droped還是truncated,
最後點擊"create" 就會生成insert語句,把生成的語句到查詢分析器裡面執行一下就可以了
2) 選擇"ViewDDL Commands"菜單->選"truncate table" 操作項->點擊"Salvage"->生成語句->查詢分析器里執行
----------------------------------------------------------------------
--log explorer使用的幾個問題
----------------------------------------------------------------------
1) 對資料庫做完全/差異/日誌備份
備份時如果選用了刪除事務日誌中不活動的條目
再用Log explorer打試圖看日誌時,提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才的記錄了
如果不選用了刪除事務日誌中不活動的條目
再用Log explorer打試圖看日誌時,就能看到原來的日誌並做恢復
2) 修改了其中一個表中的部分數據,此時用Log explorer看日誌,可以作日誌恢復
3) 然後恢復備份,(注意:恢復是斷開log explorer與資料庫的連接,或連接到其他數據上,
否則會出現資料庫正在使用無法恢復)
恢復完後,再打開log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data,選擇yes 就看不到剛才在2中修改的日誌記錄,所以無法做恢復.
4) 不要用SQL的備份功能備份,搞不好你的日誌就破壞了.
正確的備份方法是:
停止SQL服務,復制數據文件及日誌文件進行文件備份.
然後啟動SQL服務,用log explorer恢復數據