我想用外键删除表中的记录。 表结构是:
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秒
答案 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.officeCode
为NULL
,您还可以使用ON DELETE SET NULL
将员工留在那里,但将officeCode
设置为NULL
。< / p>