关于自动生成ID的初级有关问题
关于自动生成ID的初级问题。
通过Hibernate来自动生成ID作为主键,用起来是方便了,但是有一个问题一直有点想不通,比如一个简单的消息数据库,每条消息的ID都是自动生成的,但是一旦我想删掉某条数据,那么新插入的数据是不会再沿用那个被删掉的ID了,这样一来岂不是ID的数子只会越来越大,请教各位~~~
------解决方案--------------------
1、可以手动指定ID值;
2、重新指定自增字段起始值
aLTER TABLE dd AUTO_INCREMENT = 1;
------解决方案--------------------
3、将数据导入到另一个有自增字段的表中。
------解决方案--------------------
自增字段设为bigint,几十年也用不完,断了就断了吧。。。。或者,你可以再加一个字段用来对断了的进行重置,就好像是oracle的rownum。
附代码:
通过Hibernate来自动生成ID作为主键,用起来是方便了,但是有一个问题一直有点想不通,比如一个简单的消息数据库,每条消息的ID都是自动生成的,但是一旦我想删掉某条数据,那么新插入的数据是不会再沿用那个被删掉的ID了,这样一来岂不是ID的数子只会越来越大,请教各位~~~
------解决方案--------------------
1、可以手动指定ID值;
2、重新指定自增字段起始值
aLTER TABLE dd AUTO_INCREMENT = 1;
------解决方案--------------------
3、将数据导入到另一个有自增字段的表中。
------解决方案--------------------
自增字段设为bigint,几十年也用不完,断了就断了吧。。。。或者,你可以再加一个字段用来对断了的进行重置,就好像是oracle的rownum。
附代码:
- SQL code
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: 0 mysql> 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>
------解决方案--------------------
如果你要重新对ID进行编号,只有导入到一张新的自增表中