2012-03-15 2 views
0

Я работаю над проектом, который работает с java и MySQL. Мой вопрос касается части MySQL.MySQL Constrain Error 1452

Я работаю над базой данных, и я пытаюсь проверить все, но я не могу реализовать какие-либо данные.

я все время об ошибке: Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку:. Ограничение внешнего ключа терпит неудачу (pokerinschrijving .CONSTRAIN inschrijving_ibfk_1 FOREIGN KEY (Lid) Лит toernooi (Tid) ON DELETE CASCADE ON UPDATE CASCADE)

Это моя база данных:

CREATE DATABASE IF NOT EXISTS poker; 
USE poker; 

DROP TABLE IF EXISTS Locatie; 
CREATE TABLE Locatie (
Lid int(12) NOT NULL AUTO_INCREMENT, 
Lnaam Varchar(100) NOT NULL, 
Ladress varchar(100) NOT NULL, 
Lopp double, 
PRIMARY KEY (Lid) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `Locatie` (`Lid`,`Lnaam`,`Ladress`,`Lopp`) VALUES 
(10000001,'Grote zaal Den Bos','Lange weg 34, Den Bos',54.5), 
(10000002,'Casino Vlaardingen','Achterbaan 119, Vlaardingen',2500.5), 
(10000003,'Homerson Casino','Oxfordstraat 19, Zoetermeer',1000), 
(10000004,'Van der valk casino','Dorpsweg 45, Sasseheim',9899); 

DROP TABLE IF EXISTS Speler; 
CREATE TABLE Speler (
Sid int(12) NOT NULL AUTO_INCREMENT, 
Snaam varchar(50) NOT NULL, 
Se_mail varchar(80) NOT NULL, 
Sadress varchar(40) NOT NULL, 
Swoonplaats varchar(35) NOT NULL, 
Spostcode varchar(6) NOT NULL, 
Stelnr int(19) NOT NULL, 
Sgesl ENUM('M', 'F'), 
Sgbd date NOT NULL, 
Srating int(10) NOT NULL, 
Sgewonnen_geld double NOT NULL, 
Sbekende_speler boolean, 
PRIMARY KEY (Sid) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `Speler` (`Sid`,`Snaam`,`Se_mail`,`Sadress`,`Swoonplaats`,`Spostcode`,`Stelnr`,`Sgesl`,`Sgbd`,`Srating`,`Sgewonnen_geld`,`Sbekende_speler`) VALUES 
(20000003,'Jan Peter','[email protected]','Scherium weg 20','Den bos','2123IE',062586475,'M','1983-05-18',1250,209.00,False), 
(20000001,'Roy Henson','[email protected]','Shindori straat 231','Leiden','3212IO',0623568974,'M','1986-08-21',700,2310.00,True), 
(20000009,'Willium Ransom','[email protected]','Hooftweg 521','Groningen','1251UI',0623541289,'M','1979-04-29',1250,20315.00,True), 
(20000002,'Rhindia Rosenberg','[email protected]','Dorpstraat 210','Den Haag','2621',0622775412,'F','1990-11-21',275,10321.00,False); 

DROP TABLE IF EXISTS Toernooi; 
CREATE TABLE Toernooi (
Tid int(12) NOT NULL AUTO_INCREMENT, 
Tnaam varchar(100) NOT NULL, 
Tmax_speler int(5) NOT NULL, 
Tinleggeld double NOT NULL, 
Ttype varchar(25) NOT NULL, 
Tdatum datetime NOT NULL, 
Lid int(12) NOT NULL, 
PRIMARY KEY (Tid), 
FOREIGN KEY (Lid) REFERENCES Locatie (Lid) 
ON DELETE RESTRICT 
ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `Toernooi` (`Tid`,`Tnaam`,`Tmax_speler`,`Tinleggeld`,`Ttype`,`Tdatum`,`Lid`) VALUES 
(30000001,'MCi',340,75.00,'Professional','2012-06-21 19:00:00',10000002), 
(30000002,'chaos',200,150.00,'Professional','2012-07-15 21:00:00',10000003), 
(30000003,'Homerson!',400,45,'Amatuer','2012-08-25 20:30:00',10000001), 
(30000004,'Valkerin',1000,20,'Amatuer','2012-09-01 23:59:59',10000004); 

DROP TABLE IF EXISTS MasterClass; 
CREATE TABLE MasterClass (
Mid int(12) NOT NULL AUTO_INCREMENT, 
Mmin_rating int(10) NOT NULL, 
Mmax_spelers int(3) NOT NULL, 
Mniveau varchar(50) NOT NULL, 
Mdatum datetime NOT NULL, 
Sid int(12) NOT NULL, 
Lid int(12) NOT NULL, 
PRIMARY KEY (mid), 
FOREIGN KEY (Lid) REFERENCES Locatie (Lid) 
ON DELETE RESTRICT 
ON UPDATE CASCADE, 
FOREIGN KEY (Sid) REFERENCES Speler (Sid) 
ON DELETE CASCADE 
ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `MasterClass` (`Mid`,`Mmin_rating`,`Mmax_spelers`,`Mniveau`,`Mdatum`,`Sid`,`Lid`) VALUES 
(40000001,1100,50,'Professional','2012-05-21 22:00:00',20000009,10000001), 
(40000002,3500,120,'Amateur','2012-09-07 15:00:00',20000001,10000002); 

DROP TABLE IF EXISTS Status; 
CREATE TABLE Status (
Tid int(12) NOT NULL, 
Sid int(12) NOT NULL, 
ronde varchar(25) NOT NULL, 
tafel int(3) NOT NULL, 
winst double NOT NULL, 
startrating int(10) NOT NULL, 
eindrating int(10) NOT NULL, 
plaats int(5) NULL, 
PRIMARY KEY (Tid,Sid), 
FOREIGN KEY (Tid) REFERENCES Toernooi (Tid) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (Sid) REFERENCES Speler (Sid) 
ON DELETE CASCADE 
ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `Status` (`Tid`,`Sid`,`ronde`,`tafel`,`winst`,`startrating`,`eindrating`) VALUES 
(30000004,20000003,20,5,0.00,800,700), 
(30000004,20000001,12,2,0.00,750,600), 
(30000004,20000002,4,19,6700.00,1000,1250), 
(30000004,20000009,9,12,3400.00,250,275); 

DROP TABLE IF EXISTS Inschrijving; 
CREATE TABLE Inschrijving (
Iid int(12) NOT NULL, 
Sid int(12) NOT NULL, 
Ibetaald boolean, 
PRIMARY KEY (Iid,Sid), 
FOREIGN KEY (Iid) REFERENCES Toernooi (Tid) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (Iid) REFERENCES MasterClass (Mid) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (Sid) REFERENCES Speler (Sid) 
ON DELETE CASCADE 
ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `Inschrijving` (`Iid`,`Sid`,`Ibetaald`) VALUES 
(40000001,20000003,true), //Its goes wrong here!!! This is where the error come 
(40000002,20000002,false), 
(30000003,20000001,true), 
(30000004,20000009,false); 

Я надеюсь, что кто-то может мне помочь! Спасибо!

ответ

0

У вас есть интересная структура внешнего ключа: указатель указывает на две таблицы одновременно. Когда вы добавляете новый Inschrijving.Iint, должны быть строки с одинаковыми значениями Iid в и ссылочных таблиц!

CREATE TABLE Inschrijving (
Iid int(12) NOT NULL, 
!! 
FOREIGN KEY (Iid) REFERENCES Toernooi (Tid) ON DELETE CASCADE ON UPDATE CASCADE, 
FOREIGN KEY (Iid) REFERENCES MasterClass (Mid) ON DELETE CASCADE ON UPDATE CASCADE, 
+0

Значит, должны быть Tid и Mid с тем же значением Exp: Iid = 1, то Mid = 1 и Tid = 1 вправо? –

+0

Да, я думаю, MySQL должен проверять все ограничения независимо, а если один не удается, вся операция завершается с ошибкой. – biziclop

0

иностранные ключи

FOREIGN KEY (Iid) REFERENCES Toernooi (Tid) 
FOREIGN KEY (Iid) REFERENCES MasterClass (Mid) 

в таблице Defintion из Inschrijving, кажется, ссылается на неправильное поле или неправильную таблицу. Уже есть внешний ключ для Iid. И эти ссылки не имеют смысла семантически.

Смежные вопросы