我正在使用java和MySQL工作的项目。 我的问题是关于MySQL的一部分。MySQL约束错误1452
我正在处理数据库,我试图测试一切,但我无法实现任何数据。
我得到的所有的时间一个错误: 错误代码:1452不能添加或更新子行:外键约束失败(poker
inschrijving
.CONSTRAIN inschrijving_ibfk_1
外键(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);
我希望有人能帮帮我! 谢谢!
换句话说,必须有一个Tid和一个具有相同值的Mid:Exp:Iid = 1,那么Mid = 1和Tid = 1对不对? – 2012-03-15 12:37:07
是的,我认为,MySQL应该独立检查所有的约束,如果一个失败,整个操作失败。 – biziclop 2012-03-15 14:27:17