在删除级联 - 我必须添加它

时间:2012-12-17 18:39:16

标签: php mysql sql cascade cascading-deletes

我需要一个级联删除的例子。我的问题是,我在哪里添加它?在表格中我创建了PK,或者在其他表格中,这个PK作为FK坐在那里?

我可以使用“alter table”在现有表格中添加“on delete cascade”吗?请问一个例子吗?

@edit MYSQL,使用phpMyAdmin

@edit 2

看起来不错吗?

alter table wplaty
  drop foreign key pesel,
  add constraint pesel foreign key (pesel)
    references baza_osob(pesel) on delete cascade on update restrict;

我的父表= baza_osob 我的孩子表= wplaty

PK是pesel,FK也是pesel。

@ EDIT3 得到错误:

  

#1025 - 将'。\ projekt \ wplaty'重命名为'。\ projekt#sql2-1300-6c'时出错(错误号:152)

3 个答案:

答案 0 :(得分:3)

级联指令进入"孩子"表格,例如

create table parent (
   id int primary key
)

create table child (
   id int primary key
   parent_id int,
   foreign key (parent_id) references parent (id)
      on delete cascade
)

从未尝试对外键进行更改以更改其on设置,但最糟糕的情况是,您只需删除现有的FK并使用新的on设置重新定义它。

答案 1 :(得分:0)

实际上,您没有在表格上添加“ON DELETE CASCADE”。它是每个外键定义的一部分(或不是)。

答案 2 :(得分:0)

您需要为外键启用此选项。如果在创建外键时未添加此选项,则应重新创建它。

alter table <table> drop foreign key <fk name>;

alter table <table> add constraint <fk name> foreign key (<column name>)
  references <ref tble>(<ref column) on delete cascade on update restrict;

在一个声明中:

alter table <table>
  drop foreign key <old fk name>,
  add constraint <new fk name> foreign key (<column name>)
    references <ref tble>(<ref column) on delete cascade on update restrict;