使用SQL语句重置数据库中一切表的标识列(自增量)
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。在外实行的时分,常常必要为用户清空一切表中的数据,数据清空后,最好是可以让表中的标识列从1入手下手记数,以是要重置标识列确当前值。我们能够使用dbcccheckident来重置表的标识列,但一次只能重置一个表的标识列,地点就想到了游标,我们能够使用游标来轮回实行dbcccheckident语句,如许就能够重置数据库中一切表的标识列了。关于dbcccheckident的用法,能够参考本站:
重置SqlServer表的自增列,让自增列从头入手下手记数
在这之前,我们起首要猎取两个信息:
1,猎取到数据库中一切表信息,这个能够用select*fromsys.tables来完成。
2,要判别表中是不是有标识列,能够用以下sql来查询:
select*fromsys.columnswhereis_identity=1andobject_id=object_id(表名)
关于怎样猎取到数据库一切表的更多办法,请检察本站:
使用SQL语句查询数据库中一切表
失掉需要的两个信息后,我们就能够写游标来重置数据库中一切表的标识列了,sql以下:
declare@tablenamevarchar(50)
declare@sqlvarchar(1000)
declarecurcursorforselectnamefromsys.tables
opencur
fetchnextfromcurinto@tablename
while@@fetch_status=0
begin
set@sql=if(selectcount(1)from+@tablename+)<=0andexists(select*fromsys.columnswhereis_identity=1andobject_id=object_id(+@tablename+))
begin
dbcccheckident(+@tablename+,reseed,1)
end
exec(@sql)
fetchnextfromcurinto@tablename
end
closecur
deallocatecur
但愿以上办法能给人人带来便当。因此我们的方案中要构造这种逆操作。Event_type增加一种FLASHBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
页:
[1]