簡體   English   中英

MySQL約束錯誤1452

[英]MySQL Constrain Error 1452

我正在與Java和MySQL一起工作的項目。 我的問題是關於MySQL部分的。

我正在數據庫上,正在嘗試測試所有內容,但無法實現任何數據。

我得到的所有的時間一個錯誤:錯誤代碼:1452不能添加或更新子行(外鍵約束失敗pokerinschrijving .CONSTRAIN inschrijving_ibfk_1外鍵( Lid )參考toernooiTid )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','Jpeter@gmail.com','Scherium weg 20','Den bos','2123IE',062586475,'M','1983-05-18',1250,209.00,False),
(20000001,'Roy Henson','Roy.Henson@telfort.nl','Shindori straat 231','Leiden','3212IO',0623568974,'M','1986-08-21',700,2310.00,True),
(20000009,'Willium Ransom','WilRan@hotmail.com','Hooftweg 521','Groningen','1251UI',0623541289,'M','1979-04-29',1250,20315.00,True),
(20000002,'Rhindia Rosenberg','RhindiaR@gmail.com','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);

我希望有一個人可以幫助我! 謝謝!

您有一個有趣的外鍵結構:Iid同時指向兩個表。 當您添加新的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,

外鍵

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

在您的表中,Inschrijving的定義似乎引用了錯誤的字段或錯誤的表。 Iid已經有一個外鍵。 這些引用在語義上也沒有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM