SQL ALTER表外键

SQL ALTER表外键,sql,database,foreign-keys,alter-table,Sql,Database,Foreign Keys,Alter Table,我在使用ALTERTABLE命令添加外键时遇到问题。我不知道如何使它工作 我需要将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), KO

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

我需要将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);

在使用列创建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\u ID
STAADION\u ID
一起足以确定
ISIK\u 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
);

在使用列创建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\u ID
STAADION\u ID
一起足以确定
ISIK\u 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
);

你用的是什么产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称。当您尝试执行上面的
ALTER TABLE
语句时是否会生成消息?您使用的是哪种产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称。当您尝试执行上面的
ALTER TABLE
语句时是否会产生一条消息?鉴于这似乎是
ISIK
STAADION
之间的连接表,我认为应该删除
ISIK_STAADIONIL_ID
,主键应该是
(ISIK\u ID,STAADION\u ID)
@BobJarvis是的,我同意。鉴于这似乎是
ISIK
STAADION
之间的一个连接表,在我看来,
ISIK\u STAADIONIL\u ID
应该删除,主键应该是
(ISIK\u ID,STAADION\u ID)
@BobJarvis是的,我同意。