数据库上不经意出现的错误

前几天碰到一个奇怪的问题:

一张表里面有个字段是rownum, 是自增长的数值型, 然后对这个表的记录进行了汇总, 但是这个字段的排不是按照rownum的大小增长的, 而是

把汇总记录添加到了表的中间的某条记录。例如:

100,adef, 。。。。, 1232;

101,abc, 。。。。, 4322;

102,wef, 。。。。, 2222;

。。。

201,dfs, 。。。。, 2322;


这些语句是依次insert进去的。

手工添加一条记录, 视乎没有啥问题, 但是在程序里面添加记录就不可以。


后来发现需要在rownum字段上添加索引才可以。

### 回答1: 数据库中的on delete no action是指在删除主表中的记录时,不执行任何操作,即不会自动删除与之关联的从表中的记录。这种情况下,如果要删除主表中的记录,必须先手动删除与之关联的从表中的记录,否则会出现外键约束错误。 ### 回答2: "on delete no action" 是数据库中对于删除操作的一种约束方式。当我们在创建数据库表时,为了维护数据的完整性,我们可以给表中的某个外键列添加这样的约束。当有删除操作发生时,该约束会阻止删除对应行的操作。 具体来说,如果一个表A中有一个外键列指向另一个表B的某个主键列,且这个外键列定义了"on delete no action"约束,那么当我们尝试删除表B中的某个行时,如果这个行在表A中有对应的外键引用,删除操作将会被拒绝并抛出错误。 这种约束的作用是保证数据的一致性。当我们在数据库中建立了表与表之间的关联关系时,这些关联可能是必需的,即表A中的某行依赖于表B中的某行存在。如果我们允许在删除表B的某行时,对应的表A中的行仍然存在,那么就可能导致数据的不一致。因此,在这种情况下,"on delete no action"约束就起到了保护数据完整性的作用。 需要注意的是,这种约束方式只是阻止删除操作,而不会自动进行任何其他操作(如级联删除)。如果希望在删除表B的某行时,同时删除对应的表A中的行,则需要使用其他的约束方式,如"on delete cascade"。 综上所述,"on delete no action"约束是数据库中一种用来阻止删除操作的约束方式。它能够保证表之间的关联关系和数据的完整性,同时提示开发人员在进行删除操作时需要注意相应的约束条件。 ### 回答3: 数据库中的"on delete no action"是一种删除操作的约束规则。当设定为"no action"时,表示在删除操作发生时不做任何额外的动作。 具体来说,当某个表的外键引用了另一个表的主键,并且该外键的删除操作被设为"no action"时,以下情况可能发生: 1. 当尝试删除被引用的主键时,如果有对应的外键依赖关系存在,则删除操作将被拒绝,抛出一个错误。 2. 当尝试修改被引用的主键时,如果该修改导致外键依赖关系失效,则修改操作也将被拒绝,抛出一个错误。 总之,"on delete no action"的设置意味着删除操作不会被自动处理,而是需要手动处理引用关系的改变。这可以用于保护数据的完整性,以及避免不经意的破坏关联关系。 举个例子,假设有两个表"订单"和"客户",订单表中有一个外键指向客户表的主键,设置为"on delete no action"。当尝试删除客户表的某个主键时,如果该主键在订单表中有对应的订单存在,删除操作将被拒绝。这样可以防止误操作导致订单的关联关系被破坏,确保数据的一致性和完整性。 需要注意的是,在设置外键约束时,"on delete no action"只是其中一种选项,还有其他选项如"on delete cascade"、"on delete set null"等,可以根据具体需求选择适合的删除操作行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值