Mysql外键错误150
我想用两个外键创建新表,如下所示:Mysql外键错误150,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,我想用两个外键创建新表,如下所示: CREATE TABLE IF NOT EXISTS `questions` ( `question_id` int(11) NOT NULL AUTO_INCREMENT, `createddate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updateddate` timestamp NULL DEFAULT NULL, `active_flag` tinyint(4) NOT NULL
CREATE TABLE IF NOT EXISTS `questions` (
`question_id` int(11) NOT NULL AUTO_INCREMENT,
`createddate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updateddate` timestamp NULL DEFAULT NULL,
`active_flag` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`question_id`),
UNIQUE KEY `id_UNIQUE` (`question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE `alarts` (
`alart_id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`alart_name` varchar(45) NOT NULL,
`interval` int(10) unsigned NOT NULL,
`alart_sent_counter` int(10) unsigned NOT NULL,
`alart_types_id` BIGINT(20) unsigned NOT NULL,
`contact_group_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`alart_id`),
FOREIGN KEY (`alart_types_id`) REFERENCES alart_types(`alart_types_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
但我得到了一个错误:
错误代码:1005。无法创建表“alart\u问题\u映射”(错误号:150)
如何创建此表
谢谢。我唯一能看到的是,您在
CREATE table
语句中引用了一个表,而您提供的语句中没有该表:
CREATE TABLE `alart_question_mapping` (
`alart_question_mapping_id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(11) NOT NULL,
`alart_id` BIGINT(20) unsigned NOT NULL,
PRIMARY KEY (`alart_question_mapping_id`),
FOREIGN KEY (`question_id`) REFERENCES questions(`question_id`),
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
如果删除此引用,表将创建。看
编辑#1,根据您的更新,问题是您在上一个表中引用了错误的字段:
更改此项:
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
为此:
CREATE TABLE `alart_question_mapping` (
`alart_question_mapping_id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(11) NOT NULL,
`alart_id` BIGINT(20) unsigned NOT NULL,
PRIMARY KEY (`alart_question_mapping_id`),
FOREIGN KEY (`question_id`) REFERENCES questions(`question_id`),
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
)
因此,您正在更改这一行:
CREATE TABLE `alart_question_mapping` (
`alart_question_mapping_id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(11) NOT NULL,
`alart_id` BIGINT(20) unsigned NOT NULL,
PRIMARY KEY (`alart_question_mapping_id`),
FOREIGN KEY (`question_id`) REFERENCES questions(`question_id`),
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_types_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
为此:
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
如果您引用的是alart\u类型
表,那么您将希望引用alart\u类型id
而不是alart\u id
请参阅它找不到表
alart\u类型
如果重新创建已删除的表,则该表必须具有定义
符合引用它的外键约束的它必须
具有正确的列名和类型,并且必须在
参考键,如前所述。如果这些都不满意,MySQL
返回错误号1005,并引用错误中的错误150
信息
我想你是说
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_types_id`)
而不是
FOREIGN KEY (`alart_id`) REFERENCES alart(`alart_id`)
希望这是有意义的
改变陈述:
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
到
在这张桌子上
FOREIGN KEY (`alart_id`) REFERENCES alarts(`alart_id`)
如果没有对alarts\U types\U name的唯一约束,那么拥有一个自动递增的id号是没有意义的。如果没有唯一的约束,您几乎肯定会得到一个数据如下所示的表
CREATE TABLE alart_types (
alart_types_id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
alarts_types_name varchar(45) NOT NULL,
PRIMARY KEY (alart_types_id)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
此约束引用不存在的列
1 Warning
2 Critical
3 Warning
4 Warning
应该是
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
(
alart
=>alert
?)引用了alart\u类型
:alart\u类型
表在哪里?是的,我知道,但我已经准备好了一个名为:)
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_id`)
FOREIGN KEY (`alart_id`) REFERENCES alart_types(`alart_types_id`)