如果存在子记录,则禁止删除父项

时间:2016-07-29 16:22:41

标签: php mysql sql database

我有一个类别表

CREATE TABLE `tbl_categories` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL DEFAULT '0',
  `parent_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这就是它在运行后显示具有子类别的类别的方式

enter image description here

如果父记录有一个或几个子记录,我需要阻止删除父记录。我该怎么做?。

1 个答案:

答案 0 :(得分:4)

您可以使用自引用外键,但必须分两个阶段创建它:

create table foo (
    id int not null auto_increment primary key,
    parent int default null
);

alter table foo add foreign key (parent) references foo (id)
    on delete restrict;

您必须将其作为单独的alter执行,因为它在表定义本身中不起作用 - 此时表不存在,因此FK验证将失败并且不允许表要被创造。