【问题标题】:MySQL Constraint not working - error code #1452MySQL 约束不起作用 - 错误代码 #1452
【发布时间】:2014-03-31 08:38:03
【问题描述】:

一整天我都在努力让这个约束继续下去。

所涉及的表的代码是:

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, 'anoniem@anoniem.net', '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) 

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

【问题讨论】:

  • 看看 sqlfiddle - 它大叫,你不能将 char 插入布尔值
  • 我将 "Boolean" 更改为 tinyint(1),其中 tinyint 的值为 'Ý'。我仍然有相同的错误代码。
  • 我真是太愚蠢了,在应该有数字的地方填了一个字母。但是,还是不行……

标签: mysql sql constraints


【解决方案1】:

您需要在外部KEY列上创建INDEXes:

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;

【讨论】:

  • 这不幸导致另一个错误:"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INDEX (GEBRUIKERSNR_VAN), INDEX (GEBRUIKERSNR_NAAR) ) ENGINE=InnoDB DEFAULT ' at line 18 "
  • @Quinten05 你把,放在这里了吗-> PRIMARY KEY (DATENUMMER),
猜你喜欢
  • 2014-04-08
  • 2018-02-15
  • 2016-02-17
  • 2013-11-17
  • 2018-03-08
  • 1970-01-01
  • 2012-01-08
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多