2014-02-27 32 views
1

整整一天,我一直在努力实现这个约束。MySQL约束不起作用 - 错误代码#1452

所涉及表的代码是:

CREATE TABLE IF NOT EXISTS `GEBRUIKER` 
(
`GEBRUIKERSNR` varchar(5) NOT NULL, 
`VOORNAAM` text, 
`TUSSENVOEGSEL` text, 
`ACHTERNAAM` text NOT NULL, 
`GESLACHT` BOOLEAN, 
`WACHTWOORD` text NOT NULL, 
`GEB_DATUM` DATE, 
`E-MAIL` text NOT NULL, 
`TELEFOON` INT(10), 
`STRAAT` text, 
`HUISNUMMER` INT(3), 
`POSTCODE` text, 
`WOONPLAATS` text,  

PRIMARY KEY (`GEBRUIKERSNR`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Gegevens worden uitgevoerd voor tabel `GEBRUIKERS` 
-- 

INSERT INTO `GEBRUIKER` (`GEBRUIKERSNR`, `VOORNAAM`, `TUSSENVOEGSEL`, `ACHTERNAAM`,  `GESLACHT`, `WACHTWOORD`, `GEB_DATUM`, `E-MAIL`, `TELEFOON`, `STRAAT`, `HUISNUMMER`, `POSTCODE`, `WOONPLAATS`) VALUES 

(99999, 'An', NULL, 'Oniem', 'm', 'anoniem', 1991-12-13, '[email protected]', '0612345678', 'anoniemstraat', '01', '0001 AN', 'Anoniemville'); 

和:

CREATE TABLE IF NOT EXISTS `AFSPRAAK` 
(
`DATENUMMER` int(10) NOT NULL, 
`GEBRUIKERSNR_VAN` varchar(5) NOT NULL, 
`GEBRUIKERSNR_NAAR` varchar(5) NOT NULL, 
`ACCEPTATIE` BOOLEAN, 
`BERICHT` text, 
`TIJDSTIP` DATE, 
`LOCATIE` text, 

PRIMARY KEY (`DATENUMMER`) 

) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Gegevens worden uitgevoerd voor tabel `AFSPRAAK` 
-- 

INSERT INTO `AFSPRAAK` (`DATENUMMER`, `GEBRUIKERSNR_VAN`, `GEBRUIKERSNR_NAAR`, `ACCEPTATIE`, `BERICHT`, `TIJDSTIP`, `LOCATIE`) VALUES 

('9999999999', '99999', '99999', TRUE, 'Hey, wanna go out? :)', '2014-02-27 11:04:00', 'Cafe de Bezige Bij, Hofstraat 5, Rotterdam'); 

为我做了约束代码:

ALTER TABLE `AFSPRAAK` 
ADD CONSTRAINT `afspraak_ibfk_2` FOREIGN KEY (`GEBRUIKERSNR_VAN`) REFERENCES `GEBRUIKER` (`GEBRUIKERSNR`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
ADD CONSTRAINT `afspraak_ibfk_1` FOREIGN KEY (`GEBRUIKERSNR_NAAR`) REFERENCES `GEBRUIKER` (`GEBRUIKERSNR`) ON DELETE NO ACTION ON UPDATE NO ACTION; 

从PHPMyAdmin中我得到这个:

ERROR  
SQL-query: 

ALTER TABLE `AFSPRAAK` ADD CONSTRAINT `afspraak_ibfk_2` FOREIGN KEY ( `GEBRUIKERSNR_VAN`) REFERENCES `GEBRUIKER` ( `GEBRUIKERSNR`) ON DELETE NO ACTION ON UPDATE NO ACTION , 
ADD CONSTRAINT `afspraak_ibfk_1` FOREIGN KEY ( `GEBRUIKERSNR_NAAR`) REFERENCES `GEBRUIKER` ( `GEBRUIKERSNR`) ON DELETE NO ACTION ON UPDATE NO ACTION ; 


MySQL reports: Documentation 

#1452 - Cannot add or update a child row: a foreign key constraint fails (`dateos`.`#sql-1684_68`, CONSTRAINT `afspraak_ibfk_2` FOREIGN KEY (`GEBRUIKERSNR_VAN`) REFERENCES `gebruiker` (`GEBRUIKERSNR`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

现在我该做什么?另外,为什么这不起作用?

+0

[你'insert's似乎不正确](http://sqlfiddle.com/#!2/ea823) – Alexander

+0

看看sqlfiddle - 它叫喊,你不能插入char布尔 – Alexander

+0

我改变了“布尔”到一个tinyint(1),tinyint的值是'Ý'。我仍然有相同的错误代码。 – Quinten05

回答

0

您需要在国外KEY列上创建INDEX ES:

INDEX (GEBRUIKERSNR_VAN), 
INDEX (GEBRUIKERSNR_NAAR) 

和你FOREIGN KEY约束shall be created

CREATE TABLE IF NOT EXISTS `GEBRUIKER` 
(
    `GEBRUIKERSNR` varchar(5) NOT NULL, 
    `VOORNAAM` text, 
    `TUSSENVOEGSEL` text, 
    `ACHTERNAAM` text NOT NULL, 
    `GESLACHT` BOOLEAN, 
    `WACHTWOORD` text NOT NULL, 
    `GEB_DATUM` DATE, 
    `E-MAIL` text NOT NULL, 
    `TELEFOON` INT(10), 
    `STRAAT` text, 
    `HUISNUMMER` INT(3), 
    `POSTCODE` text, 
    `WOONPLAATS` text, 

    PRIMARY KEY (`GEBRUIKERSNR`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `AFSPRAAK` 
(
    `DATENUMMER` int(10) NOT NULL, 
    `GEBRUIKERSNR_VAN` varchar(5) NOT NULL, 
    `GEBRUIKERSNR_NAAR` varchar(5) NOT NULL, 
    `ACCEPTATIE` BOOLEAN, 
    `BERICHT` text, 
    `TIJDSTIP` DATE, 
    `LOCATIE` text, 

    PRIMARY KEY (`DATENUMMER`), 
    INDEX (GEBRUIKERSNR_VAN), 
    INDEX (GEBRUIKERSNR_NAAR) 

) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `AFSPRAAK` 
    ADD CONSTRAINT `afspraak_ibfk_2` 
    FOREIGN KEY (`GEBRUIKERSNR_VAN`) 
    REFERENCES `GEBRUIKER` (`GEBRUIKERSNR`) 
     ON DELETE NO ACTION ON UPDATE NO ACTION, 
    ADD CONSTRAINT `afspraak_ibfk_1` 
    FOREIGN KEY (`GEBRUIKERSNR_NAAR`) 
    REFERENCES `GEBRUIKER` (`GEBRUIKERSNR`) 
     ON DELETE NO ACTION ON UPDATE NO ACTION; 
+0

这不幸运导致了另一个错误: '“#1064 - 你的SQL语法错误;检查对应于你的MySQL服务器版本的手册, INDEX(GEBRUIKERSNR_VAN), INDEX(GEBRUIKERSNR_NAAR) )ENGINE = InnoDB DEFAULT'在第18行'' – Quinten05

+0

@ Quinten05你把','这里 - >'PRIMARY KEY(DATENUMMER),'? – hjpotter92

+0

哈哈是的。问题解决btw。感谢您的答复。 – Quinten05

相关问题