1

所以我在这里遇到了一些问题,我似乎无法解决这个问题。我正在创建一个新表Assessment_Subsection_To_Group,然后我需要添加一个列和外键,Assessment_Subsection这将在它们之间创建一个链接。

我到目前为止的代码如下所示。

CREATE TABLE IF NOT EXISTS `Assessment_Subsection_To_Group` (
    `assessment_subsection_to_group_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NOT NULL,
    `time_created` DATETIME NOT NULL,
    `time_modified` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,
    `person_id_created` INT(11) UNSIGNED NOT NULL,
    `person_id_modified` INT(11) UNSIGNED NOT NULL,
    PRIMARY KEY (`assessment_subsection_to_group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `Assessment_Subsection`
ADD COLUMN `assessment_subsection_to_group_id` INT(11) UNSIGNED NOT NULL FIRST,
ADD FOREIGN KEY `assessment_subsection_to_group_id_ibfk` (`assessment_subsection_to_group_id`) REFERENCES `Assessment_Subsection_To_Group` (`assessment_subsection_to_group_id`);

当我尝试更改Assessment_Subsection以尝试添加约束时,该表按预期创建问题。我收到此错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`at`.<result 2 when explaining filename '#sql-47f_48'>, CONSTRAINT `assessment_subsection_to_group_id_ibfk` FOREIGN KEY (`assessment_subsection_to_group_id`) REFERENCES `Assessment_Subsection_)

然后我检查了show engine innodb status;哪个给了我这个消息。我无法想象它的故事。sql 对我来说看起来不错,但我显然遗漏了一些东西。

ALTER TABLE `Assessment_Subsection` ADD COLUMN `assessment_subsection_to_group_id` INT (11) UNSIGNED NOT NULL FIRST, ADD CONSTRAINT `assessment_subsec
Foreign key constraint fails for table `at`.<result 2 when explaining filename '#sql-47f_48'>:
,CONSTRAINT `assessment_subsection_to_group_id_ibfk` FOREIGN KEY (`assessment_subsection_to_group_id`) REFERENCES `Assessment_Subsection_To_Group` (`
Trying to add in child table, in index `assessment_subsection_to_group_id_ibfk` tuple:
DATA TUPLE: 2 fields;
 0: len 4; hex 00000000; asc     ;;
 1: len 4; hex 8000000b; asc     ;;

But in parent table `at`.`Assessment_Subsection_To_Group`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 1; compact format; info bits 0
0: len 8; hex 696e66696d756d00; asc infimum ;;

提前致谢。

4

2 回答 2

1

对,所以我想我解决了这个问题。

我创建了Assessment_Subsection_To_Group空表。

我的Assessment_Subsection表中已经有很多数据。当我在其中添加新列时,它使用默认值填充该列0。因此,当我尝试将外键添加到Assessment_Subsection它时,它会看到0列中的值,并且在Assessment_Subsection_To_Group表中看不到任何可以引用的值,并吐出它的“虚拟”。

所以我通过添加一条记录解决了这个问题,Assessment_Subsection_To_Group然后用0's 更新列以匹配我刚刚添加到的记录的 idAssessment_Subsection_To_Group并尝试再次添加外键,这很有效。

肯定有一个更简单的方法来做到这一点吗?

于 2012-08-10T19:12:43.837 回答
0

将改变分成两个阶段。将列添加到一个中,然后将外键添加到另一个中。该列直到更改完成后才存在,但是您已经尝试从创建它的语句中对其进行处理。

例如,当面包还在搅拌机中时,甚至还没烤好,你就想给它涂黄油。

于 2012-08-10T18:23:16.463 回答