外键创建了一个额外的列mySQL

时间:2018-05-17 21:08:03

标签: mysql foreign-keys

在MySQL中的表中的外键中添加了一个标记为Customers_CustomerID的额外非空列,因此我无法根据我的作业输入或更新表。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

有几种选择。我们可以1)删除列2)更改列以允许NULL值,3)更改列定义以指定列的非NULL DEFAULT值,4)添加BEFORE INSERT触发器以将非NULL值设置为列,5)在INSERT上提供有效值。很多可能性。

我们可以为每个选项的语法提供一些额外的帮助,但是如果没有列定义,我们就无法提供添加DEFAULT值属性所需的确切语法。

如果列在索引中使用或在外键约束中引用,则可能无法删除该列。删除列的语法如下:

ALTER TABLE mytable DROP customers_customerid ;

更改列定义的语法如下所示,以指定DEFAULT值:

ALTER TABLE mytable CHANGE 
  customers_customerid customers_customerid BIGINT NOT NULL DEFAULT '1' COMMENT 'foo' ;
                                                            ^^^^^^^^^^^  

但我们需要知道整个列定义,并重复一遍,添加/更改需要更改的位。上面的陈述包括关于数据类型等的猜测。

我们可以使用如下语句从表的定义中获取列的当前定义:

SHOW CREATE TABLE mytable;

注意:添加外键约束的语句不会向表中添加列。您执行的语句必须包含添加列的语法。

答案 1 :(得分:0)

您还没有真正定义您尝试修复的内容。你是说"无法进入或更新表格是什么意思"?你试图用什么工具更新它?

以下是MySQL documentation中有关如何创建两个表并使用外键链接它们的示例:

CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
    id INT,
    parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id)
        REFERENCES parent(id)
        ON DELETE CASCADE
) ENGINE=INNODB;