提问人:David 提问时间:3/10/2023 最后编辑:halferDavid 更新时间:3/12/2023 访问量:32
如何解决MySQL中的“无法删除或更新父行”错误
How to resolve the "Cannot delete or update a parent row" error in MySQL
问:
我不断得到:
错误代码:1451。无法删除或更新父行:MySQL上的外键约束失败。
它只出现在“drop table if exists branches”和“drop table if exists staff”上,但其余的功能正常。
CREATE DATABASE IF NOT EXISTS Optician;
USE Optician;
DROP TABLE IF EXISTS branches;
CREATE TABLE branches (
branch_id INT PRIMARY KEY,
branch_name VARCHAR(255) NOT NULL,
branch_address ENUM('Cardiff', 'Swansea', 'Newport') NOT NULL,
staff_available BOOLEAN NOT NULL
);
DROP TABLE IF EXISTS staff;
CREATE TABLE staff (
staff_id INT PRIMARY KEY,
staff_name VARCHAR(255) NOT NULL,
staff_role ENUM('Optician', 'Receptionist', 'Technician') NOT NULL,
staff_available BOOLEAN DEFAULT true,
welsh_speaker BOOLEAN DEFAULT false,
branch_id INT,
FOREIGN KEY (branch_id)
REFERENCES branches(branch_id) ON DELETE CASCADE
);
DROP TABLE IF EXISTS appointments;
CREATE TABLE appointments (
appointment_id INT PRIMARY KEY,
customer_name VARCHAR(255) NOT NULL,
appointment_type VARCHAR(255) NOT NULL,
appointment_date DATE NOT NULL,
appointment_time TIME NOT NULL,
staff_id INT NOT NULL,
FOREIGN KEY (staff_id)
REFERENCES staff(staff_id) ON DELETE CASCADE,
UNIQUE (appointment_date, appointment_time, staff_id)
);
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_name VARCHAR(255) NOT NULL,
customer_phone VARCHAR(225) NOT NULL,
customer_email VARCHAR(255) NOT NULL,
order_type VARCHAR(255) NOT NULL,
order_status VARCHAR(255) NOT NULL,
order_date DATE NOT NULL,
technician_id INT NOT NULL,
lens_arrival_date DATE,
assembly_start_date DATE,
assembly_completion_date DATE,
FOREIGN KEY (technician_id)
REFERENCES staff(staff_id)
);
答:
0赞
P.Salmon
3/10/2023
#1
第一次运行代码时没有问题,因为需要在引用表(带有 FK 的表)之前创建引用表。再次运行代码时,必须先删除引用表(带有 FK 的表),然后才能删除引用的表。
或者,如果数据库包含要删除的所有表,则可以删除数据库并再次运行代码。
在现实世界的 aps 中,一旦数据库启动并运行,为了进行表更改而删除表是不寻常的,更常见的是使用 ALTER 表来修改表。
评论