ในโครงสร้างฐานข้อมูลของ
CREATE TABLE Country (
name varchar(40) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE City (
name varchar(40) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE Map (
country varchar(40) NOT NULL,
city varchar(100) NOT NULL,
PRIMARY KEY (country,city),
FOREIGN KEY (country) REFERENCES Country (name) ON DELETE CASCADE,
FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ฉันคาดว่าจะลบพาเรนต์ออกCityโดยปล่อยให้ค่าที่สอดคล้องกันในชายน์เหมือนเดิมโดยคำสั่งที่เท่าเทียมกันทั้งสามนี้
FOREIGN KEY (city) REFERENCES City (name) ON DELETE NO ACTION
FOREIGN KEY (city) REFERENCES City (name) ON DELETE RESTRICT
FOREIGN KEY (city) REFERENCES City (name)
แต่เมื่อมีการใช้NO ACTIONหรือหรือถนัดRESTRICT ON DELETEMySQL ไม่อนุญาตให้ฉันลบออกจากคอลัมน์หลักด้วยข้อผิดพลาดนี้:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails
('test'.'Map', CONSTRAINT 'Map_ibfk_2' FOREIGN KEY ('city') REFERENCES 'City'('name')
ON DELETE RESTRICT
ฉันผิดตรงไหน มันเป็นความรับผิดชอบของ SQL ที่NO ACTIONจะลบผู้ปกครองและออกจากเด็กกำพร้า?