大家有没有碰到过下面的问题:
比如一个table A(C1,C2,C3)
其中PK:C1+C2 (默认是not null)然后我对这个表进行如下操作
1.disable PK,disable FK
2.update A.C3(全表更新)
3.enable FK,enable PK进行完如上操作后,PK,FK全部enable了
但是出现了一个奇怪的问题:(C1,C2都变成nullable)
但是实际的数据C1,C2都是非空的,而且PK也是enabled了请大侠帮忙!
比如一个table A(C1,C2,C3)
其中PK:C1+C2 (默认是not null)然后我对这个表进行如下操作
1.disable PK,disable FK
2.update A.C3(全表更新)
3.enable FK,enable PK进行完如上操作后,PK,FK全部enable了
但是出现了一个奇怪的问题:(C1,C2都变成nullable)
但是实际的数据C1,C2都是非空的,而且PK也是enabled了请大侠帮忙!
(当中更新数据这步没有做)
正常的啊,因为你disable PK的时候C1,C2就不是主键了,默认C1,C2都变成了 nullable
后来你再加上enable PK,这时由于你的PK是联合主键C1,C2,因此Oracle对单独的C1,C2没有限制必须是 not null
既然默认变成nullable,那为什么我之后反复之前的操作,pk仍旧还是not null呢?
所不通呀!
况且你的是联合主键 只要唯一 其中一个为null是正常的 除非字段定义的时候就not null
既然主键应该字段不允许为空吧,
我新建了一个表,也是联合主键,但是我去手工把联合主键中的一个更新成nullable都是不允许的呀?!!
我晚上查了一下主键的定义:
主键就是自己设定的字段,该字段不能为空,而且该字段的值必须唯一
那为什么主键有能更新成nullable呢,郁闷!