从mysql中的父表和子表中删除记录

时间:2015-08-12 09:21:26

标签: mysql foreign-keys sql-delete

我想用外键删除表中的记录。 表结构是:

CREATE TABLE `employees` (
`employeeNumber` int(11) NOT NULL,
`lastName` varchar(50) NOT NULL,
`firstName` varchar(50) NOT NULL,
`extension` varchar(10) NOT NULL,
`email` varchar(100) NOT NULL,
`officeCode` varchar(10) NOT NULL,
`reportsTo` int(11) DEFAULT NULL,
`jobTitle` varchar(50) NOT NULL,
PRIMARY KEY (`employeeNumber`),
KEY `reportsTo` (`reportsTo`),
KEY `officeCode` (`officeCode`),
CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES   `employees` (`employeeNumber`),
CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

第二张表:

Create Table">CREATE TABLE `offices` (
`officeCode` varchar(10) NOT NULL,
`city` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`addressLine1` varchar(50) NOT NULL,
`addressLine2` varchar(50) DEFAULT NULL,
`state` varchar(50) DEFAULT NULL,
`country` varchar(50) NOT NULL,
`postalCode` varchar(15) NOT NULL,
`territory` varchar(10) NOT NULL,
PRIMARY KEY (`officeCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我正面临这个错误:

  

从办公室中删除officeCode = 7错误代码:1451。无法删除或更新父行:外键约束失败(`classicmodels``employees`,CONSTRAINT`embersals_ibfk_2` FOREIGN KEY(`officeCode`)REFERENCES`办公室`(`officeCode`))0.093秒

2 个答案:

答案 0 :(得分:1)

您有一个选项可以在删除主表后先删除子表项。像这样

delete from employees where officeCode=7
delete from offices where officeCode=7

答案 1 :(得分:0)

由于employees.officeCode被声明为offices.officeCode的外键,因此employees表中使用的所有办公代码都必须存在于offices表中。如果该办公室有员工,则无法删除办公室。

您必须先删除这些员工,或者您可以通过将ON DELETE CASCADE选项添加到FOREIGN KEY约束来告诉MySQL自动执行此操作。

如果您允许employees.officeCodeNULL,您还可以使用ON DELETE SET NULL将员工留在那里,但将officeCode设置为NULL。< / p>