2015-11-19 91 views
0
CREATE TABLE `test`.`friendlist` (
    `Lid` INT NOT NULL, 
    `Pid` INT NOT NULL, 
    `Fid` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`Fid`), 
    INDEX `Pid_idx` (`Pid` ASC), 
    INDEX `Lid_idx` (`Lid` ASC, `Pid` ASC), 
    CONSTRAINT `Lid` 
    FOREIGN KEY (`Lid` , `Pid`) 
    REFERENCES `test`.`loginauthentication` (`Lid` , `Pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Pid` 
    FOREIGN KEY (`Pid`) 
    REFERENCES `test`.`person` (`Pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 

操作失败:将SQL脚本应用到数据库时发生错误。 错误1215:无法添加外键约束 SQL语句:MySQL数据库“创建表”查询

+1

请问您可以发布引用表的定义吗?也许他们的某个PK的数据类型与你的FK的数据类型不匹配。 – cproinger

+1

您是否尝试搜寻该错误讯息?谷歌搜索'mysql错误1215'带来了几个SE页面,有人遇到了这个确切的错误。 –

回答

1

我尝试执行SQL和我FO und that列Pid dosent存在于表登录身份验证,但我添加了列并再次运行您的SQL,它工作!

ALTER TABLE `loginauthentication`ADD COLUMN `Pid` int(11) NULL AFTER `Lid` 

[SQL] CREATE TABLE `friendlist` (
    `Lid` INT NOT NULL, 
    `Pid` INT NOT NULL, 
    `Fid` INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`Fid`), 
    INDEX `Pid_idx` (`Pid` ASC), 
    INDEX `Lid_idx` (`Lid` ASC, `Pid` ASC), 
    CONSTRAINT `Lid` 
    FOREIGN KEY (`Lid` , `Pid`) 
    REFERENCES `loginauthentication` (`Lid` , `Pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Pid` 
    FOREIGN KEY (`Pid`) 
    REFERENCES `person` (`Pid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 
Affected rows: 0 
Time: 0.179ms 

Grettings!

-1

运行此DDL第一:

set foreign_key_checks=0; 

然后做查询

CREATE TABLE test.friendlist ( 
Lid INT NOT NULL, 
    Pid INT NOT NULL, 
    Fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
INDEX Pid_idx (Pid ASC), 
INDEX Lid_idx (Lid ASC, Pid ASC), 
CONSTRAINT Lid FOREIGN KEY (Lid , Pid) REFERENCES test.loginauthentication (Lid , Pid) ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT Pid FOREIGN KEY (Pid) REFERENCES test.person (Pid) ON DELETE NO ACTION ON UPDATE NO ACTION); 

EX:用我自己的参考表进行相应的修改

mysql> show create table friendlistl 

| friendlist | CREATE TABLE `friendlist` (
    `Lid` int(11) NOT NULL, 
    `Pid` int(11) NOT NULL, 
    `Fid` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`Fid`), 
    KEY `Pid_idx` (`Pid`), 
    KEY `Lid_idx` (`Lid`,`Pid`), 
    CONSTRAINT `Lid` FOREIGN KEY (`Lid`, `Pid`) REFERENCES `test` (`Lid`, `Pid`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `Pid` FOREIGN KEY (`Pid`) REFERENCES `test` (`idn`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 
+0

如果你打算把他们全部关闭并将桌子切入桌面,有什么限制?可怕。 –