我正在使用3-4个表并在所有这些表中使用自动增量。我希望所有的表都以1
开头例如student
表id从1开始,Registration
表从1开始。
现在发生的事情是自动增量从学生表的最后一个id开始。例如,学生表中的LastRow ID为100,因此Registeration
将从101开始。我希望它从1开始如何做。
答案 0 :(得分:3)
如果您已经有一些值(表格不为空),那么这是不可能的。您可以清空所有表并运行DBCC CHECKIDENT command以重置自动增量主键的值,然后从1重新启动。
DBCC CHECKIDENT ("YourTableNameHere", RESEED, number);
如果number
= 0,则在下一个插入中,自动增量字段将包含值1
如果number
= 101,则在下一个插入中,自动增量字段将包含值102
但请注意,此命令只会重置标识列的值,不会检查冲突。我的意思是,如果值1已经存在,那么在尝试插入该表时会出现错误。
答案 1 :(得分:1)
我不认为在大多数RDBMS中这是可能的。 即使它是,我也不建议你这样做 - 如果表中已有行,你应该从MAX_ROWS + 1开始。
答案 2 :(得分:1)
从1次使用开始种子:
DBCC CHECKIDENT (students, RESEED, 0)
请注意: 如果你这样做,你必须确保表是空的
答案 3 :(得分:0)
正如Einav所说,这个问题应谨慎处理!
如果您的学生表是空的,并且您试图通过测试重置计数器,或者因为每年擦除数据库等,那么您可以使用DBCC CHECKIDENT命令(如果您使用的是MS) SQL Server)或者您可以对MySql http://dev.mysql.com/doc/refman/5.0/en/alter-table.html使用alter table(auto_increment)。
但要小心,因为任何外键依赖都必须重置 - 你可能遇到各种各样的麻烦。
以下是一个快速测试方案:
--Test variables & environment
DECLARE @TimeParam AS DATETIME
CREATE TABLE #Downtime (ID int identity, initial varchar(1))
INSERT INTO #Downtime VALUES('a')
INSERT INTO #Downtime VALUES('b')
INSERT INTO #Downtime VALUES('c')
INSERT INTO #Downtime VALUES('d')
INSERT INTO #Downtime VALUES('e')
INSERT INTO #Downtime VALUES('f')
INSERT INTO #Downtime VALUES('g')
INSERT INTO #Downtime VALUES('h')
INSERT INTO #Downtime VALUES('i')
INSERT INTO #Downtime VALUES('j')
--Queries
DBCC CHECKIDENT (#Downtime)
SELECT ID, initial FROM #Downtime
DELETE FROM #Downtime
DBCC CHECKIDENT (#Downtime, RESEED, 0)
INSERT INTO #Downtime VALUES('k')
SELECT ID, initial FROM #Downtime
DROP TABLE #Downtime
--results (first select)
ID initial
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
--results (second select)
ID initial
2 j
对于您的情况,您将使用: DBCC CHECKIDENT('学生',RESEED,0);
请谨慎处理此命令,并在运行命令之前检查对此主键的所有引用。确保你也备份了数据库!