数据库|mysql教程
清空,数据库,错误,因为,该表,正由,FOREIGN,KEY
数据库-mysql教程
注册表读写增强模块源码,vscode没保存能恢复吗,轻量级ubuntu,测试tomcat通不通,c 自带sqlite,网页设计标准规范 文字,serv u无法链接服务器,js 工作流插件,前端画布框架,爬虫重启器,如何下载php,鄄城SEO,springboot新版本,花瓣网网站模板,网页微信浮动,仿腾讯云论坛模板,织梦后台search.php漏洞,安卓页面滚动效果,合同管理系统代码,万能表单小程序lzw
如下解决了五个问题 1. 清空数据 2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表 3. 种子问题, 如果表存在种子重设为0, 如不存在就不操作 4. 加了事务, 中间报错, 有后悔机会 5. 截断日志功能, 因为使
mfc 五子棋源码,ubuntu 回收容量,tomcat项目加jar包,数据爬虫炒股,php文本随机显示,酉阳智能化seo推广大概多少钱lzw
学校html网站源码,ubuntu中卸载jre,一个项目有两个tomcat,java爬虫框架jsonp,php中怎么给图片添加水印,台州seo资源lzw
如下解决了五个问题
1. 清空数据
2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表
3. 种子问题, 如果表存在种子重设为0, 如不存在就不操作
4. 加了事务, 中间报错, 有后悔机会
5. 截断日志功能, 因为使用delete, 删除后日志文件会增大, 可以不使用
if( object_id(‘pr_DataClear’) is not null )
drop procedure pr_DataClear
go
create procedure pr_DataClear
as
begin transaction
declare @cTblName varchar(128)
declare cur_Clear cursor for select rtrim(name) from sysobjects where type = ‘U’ order by crdate desc
open cur_Clear
declare @cSQL varchar(255)
fetch next from cur_Clear into @cTblName
while( @@fetch_status = 0)
begin
set @cSQL = ‘delete from ‘ + @cTblName
print @cSQL
exec( @cSQL )
if( ident_seed(@cTblName) is not null )
begin
dbcc checkident( @cTblName, reseed, 0 )
print ‘有种子且成功重置为1’
end
fetch next from cur_Clear into @cTblName
end
close cur_Clear
deallocate cur_Clear
commit
go
— 清空所有表数据
exec pr_DataClear
— 截断日志
backup log LZ的数据库 with no_log
dbcc shrinkdatabase( LZ的数据库 )
dbcc updateusage( LZ的数据库 )
— 查看表空间(概数)
select object_name(id) as 表名, (rtrim(8*reserved/1024) + ‘MB’) as 总量, (rtrim(8*dpages/1024) + ‘MB’) as 已使用,
(rtrim(8*(reserved-dpages)/1024) + ‘MB’) as 未使用, (rtrim(8*dpages/1024-rows/1024*minlen/1024) + ‘MB’ ) as 空隙
from sysindexes
where indid=1
order by reserved desc
/u/0816/17/EE0FA21E-8616-4236-A9CB-8C5A3D45C9D9.html
中45楼
对于有外键约束的表,网上普遍说的方法:
EXEC
sp_MSForEachTable
‘
ALTER TABLE ? NOCHECK CONSTRAINT ALL
‘
—
NOCHECK Const
EXEC
sp_MSForEachTable
‘
truncate TABLE ?
‘
EXEC sp_MSForEachTable ALTER TABLE ? CHECK CONSTRAINT ALL--NOCHECK Constraints
是行不通的,因为truncate不能对有外键的表 ,改为delete from tablename就行,但delete会激活触发器,这也是一个问题。