2016-03-23 152 views
0

DELETE FROM Sport WHI SportId = 1;MySQL刪除不起作用

當我在上面執行時,我得到這個錯誤。請幫幫我;

DogSport是use.Error:DELETE FROM的運動,SportId = 1 無法刪除或更新父行,外鍵約束失敗(dogsportorders,約束orders_ibfk_1外鍵(EqId)參考文獻equipmentEqId))

/* Creating Sport table */ 
CREATE TABLE Sport(
SportId INT NOT NULL AUTO_INCREMENT, 
SportName VARCHAR(20) NOT NULL, 
Description VARCHAR(200) NOT NULL, 
PRIMARY KEY(SportId) 
); 

/* Inserting values for Sport table */ 
INSERT INTO Sport(SportName,Description) 
VALUES('Agility','This is a fun dog sport which a handler directs a dog through a course of obstacles. Body motion, speed, hand signals are used by the handler to direct the dog.'), 
('Flyball','Energetic and exciting sport which is also called drag racing for dogs'), 
('Disc Dog','This sport is also known as Frisbee dog. The sport involves the bond between the owner and dog, by letting them to work together'), 
('Dog Diving','This sport involves loving run, jumping, and swimming. This is a very popular sport nowadays'), 
('Cani-Cross','This is a sport event which running off-road with dogs. It is an useful sport which keeps the owner and the dog fit by a physical workout and directional commands.'); 

/* Creating UserSport table */ 
CREATE TABLE UserSport(
UserId INT NOT NULL, 
SportId INT NOT NULL, 
PRIMARY KEY(UserId,SportId), 
FOREIGN KEY(UserId) REFERENCES User(UserId) ON DELETE CASCADE, 
FOREIGN KEY(SportId) REFERENCES Sport(SportId) ON DELETE CASCADE 
); 

/* Inserting values for UserSport table */ 
INSERT INTO UserSport(UserId,SportId) 
VALUES(1,2), 
(1,4), 
(1,3), 
(1,5); 

/* Creating Equipment table */ 
CREATE TABLE Equipment(
EqId INT NOT NULL AUTO_INCREMENT, 
EqName VARCHAR(40) NOT NULL, 
Price DECIMAL(9,2) NOT NULL, 
SportId INT NOT NULL, 
PRIMARY KEY(EqId), 
FOREIGN KEY(SportId) REFERENCES Sport(SportId) ON DELETE CASCADE 
); 

/* Inserting values for Equipment table */ 
INSERT INTO Equipment(EqName,Price,SportId) 
VALUES('Wing Jump',6700,1), 
('Tire',4500,1), 
('Open Tunnel',9000,1), 
('Chute',3000,1), 
('Boomerang Flyball Box',6300,2), 
('Training Box',4200,2), 
('Flyball Jumps',7800,2), 
('Can Am Flyball Box',3100,2), 
('Flyball Harness',1800,2), 
('Balance Disc',2000,3), 
('Training Punches',1000,3), 
('Retrieve Water Ring',4500,4), 
('Dive Jacket',3000,4), 
('Aqua Floating Toy',1500,4), 
('Cani-Cross Harness',4000,5), 
('PawZ Dog Boots',1000,5), 
('Custom Shoulder Harness',3000,5); 


/* Creating User table */ 
CREATE TABLE User(
UserId INT NOT NULL AUTO_INCREMENT, 
Title VARCHAR(5) NOT NULL, 
FName VARCHAR(20) NOT NULL, 
LName VARCHAR(20) NOT NULL, 
Email VARCHAR(30) NOT NULL UNIQUE, 
Phone VARCHAR(15), 
Address VARCHAR(30) NOT NULL, 
Password VARCHAR(20) NOT NULL UNIQUE, 
PRIMARY KEY(UserId) 
); 

/* Inserting values for User table */ 
INSERT INTO User(Title,FName,LName,Email,Phone,Address,Password) 
VALUES('Mr.','Raveen','Chandra','[email protected]','0778547079','Ambalangoda','123'), 
('Miss','Bisma','Ishani','[email protected]','0785234123','Colombo','456'), 
('Dr','Shantha','Kumara','[email protected]','0912374392','Ambalangoda','789'), 
('Ms.','Madusha','Perera','[email protected]','0782361490','Galle','3235'); 
+0

你缺少一個表是設備的子表.... –

回答

0

應該有至少一個兒童的設備表,你失蹤了。

首先執行以下命令,它會爲您提供設備的所有子表的表 -

select * from information_schema.KEY_COLUMN_USAGE where TABLE_SCHEMA ='your_db' and REFERENCED_TABLE_NAME ='equipment'; 

注:改變your_db與你的數據庫的名稱。

然後無論是從它的子表中刪除行或也應該有「ON DELETE CASCADE」,而不是「上刪除級聯不採取行動」

還有一小段路這不是一個乾淨的way-

您可以禁用您的外鍵檢查和刪除,但我不會建議它。

set foreign_key_checks=0; 
DELETE FROM Sport WHERE SportId=1; 
set foreign_key_checks=1; 
2

首先刪除有FK該表中的其他表,然後才從中刪除:

DELETE FROM Equipment WHERE SportId=1; 
DELETE FROM UserSport WHERE SportId=1; 
DELETE FROM Sport WHERE SportId=1; 
+0

先生,你是正確的。但先生,我已經使用ON DELETE CASCADE。爲什麼這不起作用? – cveee