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恢复数据