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`)