Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果存在子记录,则防止删除父记录_Php_Mysql_Sql_Database - Fatal编程技术网

Php 如果存在子记录,则防止删除父记录

Php 如果存在子记录,则防止删除父记录,php,mysql,sql,database,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; 这就是它在运行后显示带有子类别的类别的方式 我需要防止删除父记录,如果它有一个或几个子记录。如何操作?您可以拥有

我有一张分类表

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;
这就是它在运行后显示带有子类别的类别的方式


我需要防止删除父记录,如果它有一个或几个子记录。如何操作?

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

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验证将失败,不允许创建表。

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

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验证将失败,不允许创建表。

为什么不使用外键?@berty,我在哪里添加外键?view@Marc B answer;)@伯蒂,谢谢。为什么不用外键?@伯蒂,我在哪里添加外键?查看@Marc B answer;)@伯蒂,谢谢。谢谢,这就是我要找的“自我参照外键”这个词。我不确定是否可以定义自引用外键。让我试试。谢谢你,这就是我要找的词,“自我参照外键”。我不确定是否可以定义自引用外键。让我试试。