【问题标题】:MySQL: How to update foreign key field, and create a relationship, after table values have been set with default values?MySQL:如何在表值设置为默认值后更新外键字段并创建关系?
【发布时间】:2012-01-10 13:55:32
【问题描述】:

我有一个团队新闻表:

还有一张名为 team 的表:

teamnews 表中的值是在用户登录网站之前预先确定的。 假设当用户(teamName)登录时,我想更新teamID 行,其中NewsID = 1 并创建一个关系,以便如果我最终删除用户 (teamName),teamNews 表中的 teamID 值将重置为零。

这可能吗? 请记住我使用的是 phpMyAdmin,所以我对高级 SQL 术语并不完全熟悉。

当我尝试这样做时,我得到错误:

这是错误:

【问题讨论】:

    标签: php mysql database database-design


    【解决方案1】:

    您需要指定FOREIGN KEY。您可以通过运行以下命令来添加它:

    ALTER TABLE teamnews
    ADD CONSTRAINT fk_teamID
      FOREIGN KEY (TeamID)
      REFERENCES team (teamID)
      ON DELETE SET NULL;
    

    这使用外键在表之间建立正式关系。 ON DELETE SET NULL 是对您很重要的部分。这表示,每当引用表中的任何项目(在本例中为 team)被删除时,此表中具有该团队 id 的所有行都应将该字段设置为 null — 这正是您要查找的内容。

    请注意,这仅在您使用InnoDB 数据库引擎(而不是MyISAM 引擎)时才有效。您可能可以通过某个地方的 phpmyadmin 更改它(我对 phpmyadmin 不熟悉,所以我无法帮助您详细说明)。

    还要注意,要使其正常工作,MySQL 实际上必须能够“SET NULL”——包含具有此约束的外键的字段不能设置为“NOT NULL”,否则它将失败并出现错误说“检查数据类型”。

    【讨论】:

    • 我认为问题在于teamnews 表中的teamID 字段设置为“NOT NULL”。请更新它以允许空值(并将默认值设置为NULL 而不是0)。然后再次尝试添加外键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2016-05-04
    • 2021-09-11
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多