sql怎么删除一个表中的所有数据(删除数据库中的表)

sql怎么删除一个表中的所有数据(删除数据库中的表),第1张

删除表数据有两种方法:delete和truncate。具体语句如下:

一、RUNCATETABLEname:

删除表中的所有行,而不记录单个行删除 *** 作。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。

TRUNCATETABLE的语法:TRUNCATETABLEname,参数name是要截断的表的名称或要删除其全部行的表的名称。

二、Deletefromtablenamewhere1=1

1、delete语法:

DELETEFROM表名称WHERE列名称=值。

2、删除所有行:

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:DELETEFROMtable_name。

扩展资料:

truncate和delete的共同点及区别:

1、truncate和delete只删除数据不删除表的结构(定义)。

2、delete语句是dml,这个 *** 作会放到rollbacksegement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。

truncate是ddl, *** 作立即生效,原数据不放到rollbacksegment中,不能回滚 *** 作不触发trigger。

3、delete语句不影响表所占用的extent,高水线(highwatermark)保持原位置不动。truncate语句缺省情况下见空间释放到minextents个extent,除非使用reusestorage;truncate会将高水线复位(回到最开始)。

4、速度,一般来说:truncate

使用 TRUNCATE TABLE 删除所有行。
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。该语句总是比不带条件的 DELETE 语句要快,因为 DELETE 语句要记录对每行的删除 *** 作。

而 TRUNCATE TABLE 语句只记录整个数据页的释放。TRUNCATE TABLE 语句立即释放由该表的数据和索引占用的所有空间。所有索引的分发页也将释放。
与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义,同其索引和其它相关的对象一起仍保留在数据库中。必须使用 DROP TABLE 语句才能除去表的定义。

例,B1表中ID应为主键,但建表时未设,表中有重复,删除语句如下:
select id,max(c1) as c1,max(c2) as c2, into #temptable from b1 group by id
go
delete from b1
go
insert into b1 select from #temptable
go
drop table #temptable
go

请采用下列脚本


/删除索引/
declare @table table  (keyId int identity,name1 varchar(100),name2 varchar(100))
insert into @table(name1,name2)
 select object_name(object_id),name from sysindexes where name like 'IDX%'  
declare @i    int 
declare @imax int 
declare @name1 varchar(100)
declare @name2 varchar(100)
set @i =1 
select @imax = max(keyId) from @table t 
while @i <=@imax
begin
set @name1 =''
set @name2 ='' 
select @name1  = name1,@name2=name2 from @table t where tkeyId =@i
print 'drop index ['+@name2 +'] on table ['+@name1+'] '
 ---exec  ('drop index '+@name2 +' on table '+@name1  )  
 
  
set @i =@i+1 
end
go
declare @table table(keyId int identity,name varchar(100))
insert into @table (name) select name from systables where type='u'
/修理表结构/
declare @i    int 
declare @imax int 
declare @name varchar(100)
set @i =1 
select @imax = max(keyId) from @table t 
while @i <=@imax
begin
set @name =''
select @name  = name from @table t where tkeyId =@i
 
print 'alter table ['+@name +'] drop column [_MASK_FROM_V2]'
--exec ('alter table '+@name +' drop column [_MASK_FROM_V2]')
 
set @i =@i+1 
end

分两步 *** 作

1 删除索引

2 修改表结构

有疑问及时沟通。

先在测试机上 *** 作,请采纳!

如果 是主键索引,和唯一索引,并且为其他表数据外键 ,是不能删除,,先取消外键索引才行。
CREATE UNIQUE INDEX 终止,因为发现了索引 ID 2 的重复键。最重要的主键为 'type 6c, len 9'。
这个原因是你你创建索引的列 表中存在重复值,


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13074884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存