关于数据库设计时的自动增量字段的问题

来源:互联网 发布:淘宝如何解除支付宝 编辑:程序博客网 时间:2024/05/16 17:08

自动增量不能作为主键(需要被其它表作为外键的主键),主要原因是:

1、当需要进行事务插入时,会有矛盾。如:Order(OrderID, OrderName)与OrderDetail(OrderID,....),由于这两个表的数据需要采用事务插入,那就会出现是先有鸡还是先有蛋的问题。因为OrderID必须要插入后才会产生,然而OrderDetail表需要与Order表同时插入。

2、由于自动增量不能手动输入,所以会在以后维护(特别是多库合并时)会带有很大的麻烦。其中第2点。后来又有人说,自动增量是可以手动输入的。为了验证这一点,重新做了测试。

1、对于MySQL

建表User(ID,Name),其中ID为自动增量。连续插入几条记录后:

1
2
3
4
1,aaa
2,bbb
3,ccc
4,ddd

这时,可以通过update语句来使第2条记录改为(5,bbb),但是,在插入第5条记录时,如果不手动指定ID为6的话,会报主键冲突。因为自动增量是从最后一个值+1的,而不是取最大值+1的。

但是,在报主键冲突之后,如果再次尝试时,会成功。因为此时自增量已为6了。

2、对于MSSQL Server

根本无法采用Update语句来修改自动增量的值。

综上所述。以后还是尽量不要采用自动增量来作为需要给其它表作为外键的主键。

但是自动增量还是有用的。如果该表相对独立,即主键不需要给其它表作为外键时,可以采用自动增量。

或者,可以为表建两个字段,一个为自动增量作为主键,一个为非自动增量作为唯一索引,后者作为其它表的外键。

转自:http://www.jiazi.cn/blog/?id=43

0 0
原创粉丝点击