首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键约束失败

问外键约束失败
EN

Database Administration用户
提问于 2012-10-08 01:39:48
回答 2查看 36.5K关注 0票数 3

我有以下表格:

代码语言:javascript
复制
// Base Scans
CREATE TABLE `basescans` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NULL DEFAULT NULL,
    `status_id` INT(10) UNSIGNED NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT `status_id_fk` FOREIGN KEY (`status_id`) REFERENCES `statuses` (`id`) ON UPDATE CASCADE ON DELETE SET NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT
AUTO_INCREMENT=29

// Statuses
CREATE TABLE `statuses` (
    `id` INT(10) UNSIGNED NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=4

当我输入外键约束时,试图保存第一个表失败了。不知道为什么。约束中引用的两个列具有相同的类型、大小等:

代码语言:javascript
复制
INT(10) UNSIGNED NULL

它们只有一个不同的默认值。一个默认值为NULL,另一个是AUTO_INCREMENT。我不认为这对外键限制有什么影响,但我可能错了。

这两个表都是InnoDB和UFT8。我在这里错过了什么?

更新:我的具体错误:

代码语言:javascript
复制
/* SQL Error (1452): Cannot add or update a child row: a foreign key constraint fails (`db`.<result 2 when explaining filename '#sql-31c2_22ac1e1'>, CONSTRAINT `status_id_fk` FOREIGN KEY (`status_id`) REFERENCES `statuses` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) */
EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-10-08 02:42:18

在定义引用外键的外键之前,需要声明外键引用的表。

一旦声明了第二个表,就可以声明第一个表。在这里 5.5.27上测试MySQL。

如果需要绕过验证,可以这样做:

代码语言:javascript
复制
SET FOREIGN_KEY_CHECKS = 0;
-- declare tables
SET FOREIGN_KEY_CHECKS = 1;

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_涉外_钥匙_检查

票数 6
EN

Database Administration用户

发布于 2014-06-12 06:07:02

使用查询1和2删除表

1)设FOREIGN_KEY_CHECKS = 0;

2)液滴表TableName;

这里是TableName,您想要删除哪个表

票数 -2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/25581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档