我有以下表格:
// 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当我输入外键约束时,试图保存第一个表失败了。不知道为什么。约束中引用的两个列具有相同的类型、大小等:
INT(10) UNSIGNED NULL它们只有一个不同的默认值。一个默认值为NULL,另一个是AUTO_INCREMENT。我不认为这对外键限制有什么影响,但我可能错了。
这两个表都是InnoDB和UFT8。我在这里错过了什么?
更新:我的具体错误:
/* 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) */发布于 2012-10-08 02:42:18
在定义引用外键的外键之前,需要声明外键引用的表。
一旦声明了第二个表,就可以声明第一个表。在这里 5.5.27上测试MySQL。
如果需要绕过验证,可以这样做:
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_涉外_钥匙_检查
发布于 2014-06-12 06:07:02
使用查询1和2删除表
1)设FOREIGN_KEY_CHECKS = 0;
2)液滴表TableName;
这里是TableName,您想要删除哪个表
https://dba.stackexchange.com/questions/25581
复制相似问题