mysql - 无法在 MySQL 错误 : 150 中创建外键

标签 mysql foreign-keys mysql-error-1005

我创建了下表,但不知道为什么我的外键约束脚本不起作用。

CREATE TABLE IF NOT EXISTS `project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`project_id` varchar(60) NOT NULL,
`project_name` varchar(500) NOT NULL,
`cons_bal` int(11) NOT NULL,
`non_cons_bal` int(11) NOT NULL,
`budget_head` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

这是我的另一张 table :

CREATE TABLE IF NOT EXISTS `project_map` (
`id` int(11) NOT NULL,
`project_id` varchar(60) NOT NULL,
`head` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是我添加的约束行:

alter table project_map add constraint p_map_fk001 foreign key (`project_id`) references project(`project_id`)

任何帮助都会很好。谢谢。

最佳答案

在被引用的表中,必须有一个索引,其中被引用的列以相同的顺序列为第一列。

引用:http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

所以尝试:

CREATE TABLE `project` (                                                                                                                                                                                                                                                                                                                             
           `id` int(11) NOT NULL AUTO_INCREMENT,                                                                                                                                                                                                                                                                                                              
           `project_id` varchar(60) NOT NULL,                                                                                                                                                                                                                                                                                                                 
           `project_name` varchar(500) NOT NULL,                                                                                                                                                                                                                                                                                                              
           `cons_bal` int(11) NOT NULL,                                                                                                                                                                                                                                                                                                                       
           `non_cons_bal` int(11) NOT NULL,                                                                                                                                                                                                                                                                                                                   
           `budget_head` varchar(100) NOT NULL,                                                                                                                                                                                                                                                                                                               
           PRIMARY KEY (`id`),                                                                                                                                                                                                                                                                                                                                
           KEY `project_id` (`project_id`)                                                                                                                                                                                                                                                                                                                    
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8   


CREATE TABLE `project_map` (                                                                                                                                                                                        
               `id` int(11) NOT NULL,                                                                                                                                                                                            
               `project_id` varchar(60) NOT NULL,                                                                                                                                                                                
               `head` int(11) NOT NULL,                                                                                                                                                                                          
               PRIMARY KEY (`id`),                                                                                                                                                                                               
               KEY `project_id` (`project_id`)                                                                                                                                                                                   
             ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

ALTER TABLE `project_map` ADD CONSTRAINT 
`p_map_fk001` FOREIGN KEY (`project_id`)
REFERENCES project(`project_id`);

关于mysql - 无法在 MySQL 错误 : 150 中创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874478/

相关文章:

php - mysql获取每个帖子最频繁值的结果

php - 用户 'apache' @'localhost' 的访问被拒绝(使用密码 : NO)

MySQL:INSERT 被外键引用行的更新阻塞

mysql - 外键失败

php - phpMyAdmin 中导入的编程等效项

mysql - mySQL 不能在表之间共享外键吗?

mysql - 从另一个表实体更新 MySQL 表列

mysql - 如何按自定义定义的一周对记录进行分组?

mysql - 另一个外键问题 - #1451 - 无法删除或更新父行 : a foreign key constraint fails

mysql - 不能在mysql中添加外键?