我正在帮助我的 friend 做一些数据库管理工作。基本上他有 2 个数据库,一个叫城市,一个叫运费。每个表都显示在网页中,每条记录旁边都有编辑和删除按钮。所以他可以通过网络删除数据库中的数据。
交易是,我想在这个 mysql 数据库上进行级联删除,这样每次我在城市数据库中删除一行时,运费数据库中具有相同 city_ID 的相应行也会被删除。我尝试做一些 mysql 查询组合,但没有用。这是我得到的
require_once('../../model/city.php');
if(isset($_POST['id'])){
//edit or remove
$id = $_POST['id'];
$dbo = City::get_by_id($id);
if($_POST['action'] == 'remove'){
//remove
//$dbo->delete();
mysql_query("DELETE city.*, shipping_rate_loc.* FROM city c, shipping_rate_loc s WHERE c.ID_city = s.ID_city");
echo "Data is removed.";
}
如你所见,我只是把那个mysql_query放在他之前的
$dbo->delete();
成功删除城市的代码,但未删除其相关运费。
我在 PHP 中使用 mysql 是相当新手,所以任何人都可以帮我指出我的错误在哪里吗?非常感谢:)
更新: 我已经从答案中尝试了一些解决方案。他们都没有工作。即使我简化了事情。这让我想知道,在将 php 连接到数据库方面是否有任何错误?
最佳答案
最好的方法是修改数据库设置,将 on delete cascade
包含到 shipping_rate_loc
表的外键中,例如
create table city
(
id integer,
name varchar,
...
primary key (id)
);
create table shipping_rate_loc
(
id integer,
city_from integer,
city_to integer,
...
foreign key (city_from) references city(id) on delete cascade,
foreign key (city_to) references city(id) on delete cascade
);
这样,当您从 city
表中删除一条记录时
DELETE FROM city WHERE id = myid
表 shipping_rate_loc
中该城市位于 city_from
或 city_to
列中的所有记录将被数据库自动删除 - 无需您用 PHP 做任何事情。
关于php - 在 PHP 上执行 mysql 级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570098/