日期:2014-05-18  浏览次数:20475 次

更改有外码约束的数据
例如我有两个表

create table a1
(ano int primary key)

create table a2
(ano int
foreign key ano references a1(ano))

两个表各有一个值 都是1.

然后现在我想要把a1的1改为2,但是直接update的时候,会出现因为外键约束的错误。
先修改a2也会有同样的错误。
就算是把两句update写在了一起,还是不行。

所以说求指导,怎么更改有外码约束的数据。a2的数据是不能删除,只能修改的。

菜鸟求指导啊。

------解决方案--------------------
create table a2
(ano int
foreign key ano references a1(ano) ON UPDATE CASCADE )


------解决方案--------------------
是可以更改的。但是更改必须符合约束条件
------解决方案--------------------
或者用级联:

级联参考完整性约束(Cascading Referential Integrity Constraints)

级联参考完整性约束可以控制在删除或更新有外键约束的数据时所采取的操作。这种控制是通过在
CREATE TABLE 或 ALTER TABLE 命令中的 REFERENCES 子句中加入 
ON DELETE 或 ON UPDATE 子句来实现的。


------解决方案--------------------
SQL code

create table a1
(ano int primary key)

create table a2
(ano int
 constraint fk_a2_ano foreign key (ano) references a1(ano))

insert into a1 select 1
insert into a2 select 1

--方法1,(同时修改为2)
insert into a1 select 2

update a2 set ano=2

delete a1 where ano=1

select * from a1
select * from a2

ano
-----------
2

ano
-----------
2


--方法2,(同时修改为3)
alter table a2 drop fk_a2_ano 

alter table a2 add constraint fk_a2_ano
foreign key (ano) references a1(ano) on update cascade 

update a1 set ano=3 where ano=2

select * from a1
select * from a2

ano
-----------
3

ano
-----------
3