Mysql 如何删除另一个表中主键作为外键引用的表中的记录?
在我的数据库中,有一个名为“employee”的表,它有一个主键属性“employee_id”和另一个属性“salary”。 还有一个表是“employee_qualification”,它具有外键属性“employee_id”。 那么,如何删除工资=10000的“员工”和“员工资格”中的所有记录 这似乎不起作用Mysql 如何删除另一个表中主键作为外键引用的表中的记录?,mysql,sql,database,Mysql,Sql,Database,在我的数据库中,有一个名为“employee”的表,它有一个主键属性“employee_id”和另一个属性“salary”。 还有一个表是“employee_qualification”,它具有外键属性“employee_id”。 那么,如何删除工资=10000的“员工”和“员工资格”中的所有记录 这似乎不起作用 从employee.salary=10000的员工中删除您可以执行两条语句 DELETE FROM employee_qualifications WHERE employee_qua
从employee.salary=10000的员工中删除代码>您可以执行两条语句
DELETE FROM employee_qualifications WHERE employee_qualifications.employee_id in (SELECT employee_id FROM employee WHERE employee.salary=10000)
DELETE FROM employee WHERE employee.salary=10000
虽然这会起作用,但它可能会在employee_资格表中留下一些孤立的记录。下面的选项将清除孤立记录
DELETE FROM employee WHERE employee.salary=10000
DELETE FROM employee_qualifications WHERE employee_qualifications.employee_id Not in (SELECT employee_id FROM employee)
您可以执行两条语句
DELETE FROM employee_qualifications WHERE employee_qualifications.employee_id in (SELECT employee_id FROM employee WHERE employee.salary=10000)
DELETE FROM employee WHERE employee.salary=10000
虽然这会起作用,但它可能会在employee_资格表中留下一些孤立的记录。下面的选项将清除孤立记录
DELETE FROM employee WHERE employee.salary=10000
DELETE FROM employee_qualifications WHERE employee_qualifications.employee_id Not in (SELECT employee_id FROM employee)
MySQL允许同时删除多个表。因此,您可以:
DELETE e, eq
FROM employee e JOIN
employee_qualitifications eq
WHERE e.employee_id = eq.employee_id AND
e.salary = 10000;
MySQL允许同时删除多个表。因此,您可以:
DELETE e, eq
FROM employee e JOIN
employee_qualitifications eq
WHERE e.employee_id = eq.employee_id AND
e.salary = 10000;
使用(例如)配置架构,或者首先手动删除依赖记录。(我更喜欢后者,尽管它看起来需要更多的工作:它也更容易控制和明确。)我在google的某个地方遇到了DELETE CASCADE上的,
,但这到底要写在哪里?请参阅上面的链接-它用于配置依赖表的外键定义。使用(例如)配置模式或者先手动删除从属记录。(我更喜欢后者,尽管它看起来更容易操作:它也更容易控制和明确。)我在google的某个地方遇到了DELETE CASCADE上的,
,但这到底要写在哪里?请参见上面的链接-它用于配置依赖表的外键定义。这很巧妙。它是否也意味着一个[隐式]事务?@user2864740。这可能取决于所使用的存储引擎。InnoDB在一个事务中进行删除,我希望多表删除也是如此。这很巧妙。它是否也意味着一个[隐式]事务?@user2864740。这可能取决于所使用的存储引擎。InnoDB在单个事务中进行删除,我希望多表删除也是如此。。因此,当使用DRI时,MySQL中永远不会有孤立记录。要防止“孤立”(确保从主表中删除行时删除不会失败),请使用适当的事务。即使在支持延迟检查的数据库中,如果没有适当的保护,操作仍然可能失败(在提交时)。。因此,当使用DRI时,MySQL中永远不会有孤立记录。要防止“孤立”(确保从主表中删除行时删除不会失败),请使用适当的事务。即使在支持延迟检查的数据库中,如果没有适当的保护,操作仍然可能失败(在提交时)。