Firebird外键和来自另一个表的引用

时间:2014-05-27 05:55:58

标签: sql firebird firebird2.5

所以我在将外键添加到我的表中时出现问题" Tekmovalec"。我想通过使用名为" Kraj"的另一个表的引用来向该表添加新密钥。不知怎的,当我尝试添加外键时总是会出错,所以我再次创建了新的数据库并复制了迄今为止我所做的所有命令。 那么有谁知道为什么这不起作用?

制作新数据库:

SQL> create database "c:\Baze\Tekmovanje.fdb" user 'sysdba' password 'masterkey';

SQL> create domain Rezultat as integer default 18 not null
CON> check (value between 1 and 32);
SQL>

SQL> create table Tekmovalec(
CON> TekmovalecID integer not null,
CON> ime char(10) not null,
CON> priimek char(20) not null,
CON> vzdevek char(10),
CON> rojen date,
CON> tocke rezultat,
CON> primary key (tekmovalecID));
SQL>

SQL> create table Kraj(
CON> krajID int not null,
CON> imekraja char(20) not null,
CON> primary key(krajID));
SQL>

SQL> alter table Tekmovalec add foreign key (krajID) references kraj (krajID)
CON> on delete no action on update cascade;
SQL>

然后当我在alter table Tekmovalec添加外键后按Enter键时出现此错误....

Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-Unknown columns in index RDB$FOREIGN3
SQL>

1 个答案:

答案 0 :(得分:1)

在添加foreign key关系之前,必须在两个表中都有连接列。

krajID表中存在

Kraj列,但Tekmovalec表中缺少该列。

2可以做2件事:

  1. 删除表Tekmovalec并通过添加krajID列重新创建它。像:

    create table Tekmovalec(
        ....
        krajID int,
        primary key (tekmovalecID));
    
  2. 更改现有表并添加新列。像:

    alter table Tekmovalec add krajID int
    
  3. Add new column to table