物理表中插入了重复的键。
查看数据库,待插入表确实存在了已经存在的主键,所以不能够重复插入。
程序实体集中插入了重复键。
这个比较难查一些,一般是在程序中使用了dataset/datatable或实体集(linq to sql,EF技术)而插入时是先手入到实体集,由实体集向数据库更新数据,实现持久。在相应的datatable中插入了重复的键也是不可行的!
在同一事务中存在的两次插入。
写程序时不小心,在同一事务中两次插入,自然会引起主键约束,而错误后进行了回滚,导致一个也插入不了。在非事务中,则会插入一条,二次插入时报错。
其实在同一事务中的两次插入,可能是插入到物理表,也可能是在程序实体集中插入,总之不管哪种情况都是出现相同的结果。
只设置了一个主键,每次插入数据时都会提示主键值重复,不能插入数据,但是数据还是成功插入了数据库。这种情况,要么就是SQL系统本身出问题了(不过这种可能性小得很呢),一种可能是重复插入数据了(这种情况下,本应插入两条)(第二条插入时,提示重复,结果插入失败),所以你看到的结果就是提示重复,但插入了一条记录。你可以在查询分析器或管理器中,看一下这个表的相关性,是否其中有记录插入 *** 作。
主键的值不能重复。
外键主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
主键是用来唯一表示一条数据的值,不能重复的。比如,一条记录包括身份正号,姓名,年龄。身份z号是唯一能确定你这个人的,其他都可能有重复,所以,身份z号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
扩展资料:
数据库中的表必须符合规范,才能杜绝数据冗余、插入异常、删除异常等现象。规范的过程是分解表的过程。经过分解,伺一事物的代表属性出现在不同的表中。显然,它们应该保持一致。
例如,某学生的代表数据是学号012,在学生表里是012,在成绩表里也应该是012。这种一致性由外键实现。外键的功能是:它的值一定是另一个表的主键值。学号在学生表里是主键,在成绩表里是外键。成绩表里的学号一定要是学生表里的学号。
于是,学生表里的学号和成绩表里的学号就一致了。可以直观地理解,外键的功能是实现同一事物在不同表中的标志一致性。
参考资料来源:外键
参考资料来源:数据库主键
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)