我有一个1000行的表。
我需要删除5到1000之间的行,因此前4个保持不变,删除4之后的eveythin。
但是,如果我写下这样的话:
DELETE FROM table_name WHERE id > 4
INSERT后的下一条记录的编号是1001,我不想要。
如何删除行,但强制所有下一行的编号为我上次ID的编号?
P.S。我不能使用ALTER TABLE删除所有表。
提前致谢。
答案 0 :(得分:0)
Can you do this?
ALTER TABLE theTableInQuestion AUTO_INCREMENT=5
答案 1 :(得分:0)
如果您的id - auto_increment字段需要使用ALTER TABLE来更改它的值......
但是如果不可能你可以尝试不删除行但是将值设置为NULL或“”或0然后只是更新那里的值 不是INSERT而是UPDATE ... WHERE id = 5
答案 2 :(得分:0)
认为该表位于auto_increment
。如果您不能ALTER TABLE
,则需要在每个查询中手动提供ID,例如
INSERT INTO table (id,value) VALUES ((SELECT MAX(id)+1 FROM table), value);
(参见对锁表的评论)
答案 3 :(得分:0)
使用MySQL?你没有。除非你调用ALTER TABLE,否则AUTO_INCREMENT永远不会......减少。您是否考虑过使用触发器DELETE?
(您可能需要对此进行调试)
delimiter |
CREATE TRIGGER testref AFTER DELETE ON theTableInQuestion
FOR EACH ROW BEGIN
IF SELECT COUNT(*) FROM test1 < 5 THEN
ALTER TABLE theTableInQuestion AUTO_INCREMENT=5
END IF;
END;
|
答案 4 :(得分:0)
DBCC CHECKIDENT('table_name',RESEED,new_reseed_value)==&gt;适用于MS-SQL
ALTER TABLE table_name AUTO_INCREMENT = 5 ==&gt;适用于MySQL