【问题标题】:SQL ALTER TABLE foreign keySQL ALTER TABLE 外键
【发布时间】:2018-04-27 09:47:37
【问题描述】:

我在使用 alter table 命令添加外键时遇到问题。我不知道如何使它起作用。

我需要将 ISIK_ID 和 STAADION_ID 作为外键添加到 ISIK_STAADIONIL 表中。

这是我的代码:

    CREATE TABLE ISIK(
    ISIK_ID INT NOT NULL,
    EESNIMI VARCHAR(25) NOT NULL, 
    PEREKONNANIMI VARCHAR(25) NOT NULL,
    ISIKUKOOD VARCHAR(20),
    KODAKONDSUS VARCHAR(30),
    SUGU CHAR(1) NOT NULL,
    HARIDUSTASE CHAR(1) NOT NULL,
    TELEFONI_NR VARCHAR(20),
    SYNNIPAEV DATE,
    CONSTRAINT ISIK_ID_PK PRIMARY KEY (ISIK_ID)
    );

    CREATE TABLE ISIK_STAADIONIL(
    ISIK_STAADIONIL_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_STAADIONIL_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP
    );

    CREATE TABLE STAADION(
    STAADION_ID INT NOT NULL,
    NIMETUS VARCHAR(20),
    KIRJELDUS VARCHAR(100),
    ASUKOHT VARCHAR(50),
    SUURUS VARCHAR(20),
    MAHUTAVUS INT,
    EHITATUD VARCHAR(20),
    EHITAJA VARCHAR(20),
    CONSTRAINT STAADION_ID_PK PRIMARY KEY (STAADION_ID)
    );

ALTER TABLE ISIK_STAADIONIL
ADD CONSTRAINT ISIK_ID_FK
FOREIGN KEY(ISIK_ID)
REFERENCES ISIK(ID);

【问题讨论】:

  • 您使用的是哪个DBMS 产品?后格雷斯?甲骨文? “SQL”只是一种查询语言,并不是特定数据库产品的名称。
  • 当你尝试执行上面的ALTER TABLE 语句时是否产生消息?

标签: sql database foreign-keys alter-table


【解决方案1】:

您需要先添加列(到表中),然后才能使用它们创建 FK 约束。

CREATE TABLE ISIK_STAADIONIL(
    ISIK_STAADIONIL_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_STAADIONIL_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP,
    ISIK_ID INT,
    STAADION_ID INT
);

然后你的ALTER 语句应该可以正常工作了。

更新

稍微改变一下表格设计会更有意义,如下所示。逻辑是ISIK_IDSTAADION_ID 一起足以确定ISIK_STAADIONIL 表中的唯一性,因此单独的ID 是多余的:

CREATE TABLE ISIK_STAADIONIL(
    ISIK_ID INT NOT NULL,
    STAADION_ID INT NOT NULL,
    CONSTRAINT ISIK__STAADIONIL_ID_PK PRIMARY KEY (ISIK_ID, STAADION_ID),
    ALATES TIMESTAMP,
    KUNI TIMESTAMP
);

【讨论】:

  • 鉴于这似乎是ISIKSTAADION 之间的联结表,在我看来应该删除ISIK_STAADIONIL_ID,主键应该是(ISIK_ID, STAADION_ID)。跨度>
  • @BobJarvis 是的,我同意。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多