我已经从SQL Server数据库的表中删除了一些记录。现在,ID从101变为1200。我想再次删除记录,但是我希望ID返回至102。在SQL Server中有没有办法做到这一点?
我已经从SQL Server数据库的表中删除了一些记录。现在,ID从101变为1200。我想再次删除记录,但是我希望ID返回至102。在SQL Server中有没有办法做到这一点?
Answers:
发出以下命令重新设置mytable的种子,使其从1开始:
DBCC CHECKIDENT (mytable, RESEED, 0)
在联机丛书(BOL,SQL帮助)中阅读有关它的信息。另外请注意,您所记录的种子数不要超过您设置的种子数。
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)
如果number = 0,则在下一次插入时,自动递增字段将包含值1
如果number = 101,则在下一次插入时,自动递增字段将包含值102
一些其他信息...可能对您有用。在上述查询中
提供自动增量之前number
,您必须确保现有表的自动增量列包含的值小于number
。
要从表(table1)获取列(column_name)的最大值,可以使用以下查询
SELECT MAX(column_name) FROM table1
半防白痴:
declare @max int;
select @max = max(key) from table;
dbcc checkident(table,reseed,@max)
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
如果您使用的是MySQL,请尝试以下操作:
ALTER TABLE tablename AUTO_INCREMENT = 1
删除并重新设置数据库中的所有表。
USE [DatabaseName]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0
Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back
-- You may ignore the errors that shows the table without Auto increment field.
有几个答案建议使用类似以下的语句:
DBCC CHECKIDENT (mytable, RESEED, 0)
但是OP表示“删除了一些记录”,可能不是全部,因此0值并不总是正确的。另一个答案建议自动找到最大电流值并重新补乘该最大值,但是如果表中没有记录,则会遇到麻烦,因此max()将返回NULL。建议使用简单的评论
DBCC CHECKIDENT (mytable)
重置该值,但是另一条正确的注释指出,这只会将该值增加到表中已经存在的最大值;如果该值已经大于表中的最大值(OP希望这样做),则不会减小该值。
更好的解决方案结合了这些想法。如果表中有记录,则第一个CHECKIDENT将该值重置为0,第二个CHECKIDENT将其重置为当前表中的最大值:
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT (mytable)
如多个注释所示,请确保其他表中没有指向已删除记录的外键。否则,这些外键将指向您在重新创建表后创建的记录,这几乎可以肯定不是您要记住的。
我想添加此答案,因为DBCC CHECKIDENT
-approach在为表使用架构时会产生问题。使用此来确保:
DECLARE @Table AS NVARCHAR(500) = 'myschema.mytable';
DBCC CHECKIDENT (@Table, RESEED, 0);
如果要检查操作是否成功,请使用
SELECT IDENT_CURRENT(@Table);
应该0
在上面的示例中输出。
那这个呢?
ALTER TABLE `table_name`
MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
这是一种将自动增量更改为0或所需数字的快速简便的方法。我通过导出数据库并自己阅读代码来解决了这一问题。
您也可以这样编写,使其成为单行解决方案:
ALTER TABLE `table_name` MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;