通过Hibernate来自动生成ID作为主键,用起来是方便了,但是有一个问题一直有点想不通,比如一个简单的消息数据库,每条消息的ID都是自动生成的,但是一旦我想删掉某条数据,那么新插入的数据是不会再沿用那个被删掉的ID了,这样一来岂不是ID的数子只会越来越大,请教各位~~~
解决方案 »
- 关于Asp.net的问题
- sql正则表达式替换
- MySQL百万以上数据分页实例(升级上一贴)
- 请问簇也就是cluster支持XP吗?我看了支持MAC,LINUX,SOLARIS
- 如何将本地数据直接存储到远程数据库?
- mysql在WINDOWS环境下怎样实现增量备份啊?
- 请问mysql怎样建立角色数据库和怎样为用户分配角色?
- 如何用VB上传一个Access文件到Ftp后,启动一个网站中的一个程序:必须是服务器后台执行(dll?com+?),将上传的文件中所有的记录转换到My S
- ODBC中看不到mysql
- 请问有谁知道怎样让MYSQL支持中文字段名
- 火车订票系统的数据库怎么设计?
- hash索引和B+树索引的比较
2、重新指定自增字段起始值
aLTER TABLE dd AUTO_INCREMENT = 1;
比如有1000条数据,其中ID为5、10、20、88等被删掉了,
aLTER TABLE dd AUTO_INCREMENT = 1
难道重置以后它会自动补齐上面这些被删掉的ID?2、将数据导入到另一个有自增字段的表中。
意思就是说,隔上一段时间将旧表中的数据重新导入到一张新的自增表中,以此来维护表中ID的连续性?
附代码:
mysql> select * from test;
+------+------+------+
| id | name | num1 |
+------+------+------+
| 1 | a | 1 |
| 2 | b | 2 |
| 3 | c | 3 |
| 5 | e | 5 |
| 6 | f | 6 |
+------+------+------+
5 rows in set (0.00 sec)mysql> update test set num1=(select t.rownum from(
-> select a.id,a.name,count(*) as rownum from test a,test b
-> where a.num1>=b.num1 group by a.id,a.name) t where test.id=t.id);
Query OK, 2 rows affected (0.02 sec)
Rows matched: 5 Changed: 2 Warnings: 0mysql> select * from test;
+------+------+------+
| id | name | num1 |
+------+------+------+
| 1 | a | 1 |
| 2 | b | 2 |
| 3 | c | 3 |
| 5 | e | 4 |
| 6 | f | 5 |
+------+------+------+
5 rows in set (0.00 sec)mysql>