如何在 SQL Server 的表中添加 2 个外键?

Posted

技术标签:

【中文标题】如何在 SQL Server 的表中添加 2 个外键?【英文标题】:How to add 2 foreign keys in a table in a SQL Server? 【发布时间】:2016-07-26 03:36:00 【问题描述】:

我有 2 个表,其中一个有 2 个外键,另一个有 2 个复合外键。每当我尝试运行查询时,它都会显示错误并且无法创建约束或索引。所以我这里有两张桌子。

我知道我完全错了,对此我深表歉意,因为我是编码新手。

create table Booking
(
    BookingID char(4) primary key, 
    dateBooked datetime not null,
    creditCard char(16) null, 
    expiryDate datetime not null,
    CVC char (3) not null,
    confirmationID char(4) not null,
    ticketType varchar(20) 
         foreign key references ticketType(ticketType),
    NRIC char(9) 
         foreign key references Patron(NRIC)
)

create table BookingSeat 
(
    seatNo char(2) not null,
    rowNo char(2) not null,
    date datetime not null,
    startTime time not null,
    rowNo char(2) not null,
    seatNo char(2) not null,

    foreign key (date, startTime) 
         references hallSchedule(date, startTime),
    foreign key (rowNo, seatNo) 
         references Seat(rowNo, seatNo)
)

【问题讨论】:

【参考方案1】:

外键语法为:

 FOREIGN KEY (addid) REFERENCES Table1_Addr(addid),
 FOREIGN KEY (id) REFERENCES Table1(id)

预订。以下是我注意到在将 NRIC 设置为外键之前应该放在桌子上的内容:

CREATE TABLE BOOKING 
(BookingID char(4) primary key
, dateBooked datetime not null
, creditCard char(16) null
, expiryDate datetime not null
, CVC char (3) not null
, confirmationID char(4) not null
, ticketType varchar(20) 
, NRIC char(9)    
,FOREIGN KEY (ticketType) REFERENCES ticketType(ticketType)
,FOREIGN KEY (NRIC) REFERENCES Patron(NRIC))

对于 BookingSeat,您在此表上没有主键?我注意到你定义了 seatNo 两次。

CREATE TABLE BookingSeat 
(seatNo char(2) not null
, rowNo char(2) not null
, date datetime not null
, startTime time not null
, rowNo char(2) not null
, FOREIGN KEY (date) REFERENCES hallSchedule(date)
, FOREIGN KEY (startTime) REFERENCES hallSchedule(startTime)
, FOREIGN KEY (rowNo) REFERENCES Seat(rowNo)
, FOREIGN KEY (seatNo) REFERENCES Seat(seatNo))

请参阅以下链接以获取参考: Can a table have two foreign keys? Multiple foreign keys?

【讨论】:

谢谢你,它有很大帮助。我现在终于可以运行我的查询了。【参考方案2】:

要允许命名 FOREIGN KEY 约束,并在多个列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:

您可以使用 FOREIGN KEY REFERENCES 约束在 SQL Server 中实现外键关系。指定表名。然后在括号中指定要引用它的外键的列名。

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

【讨论】:

以上是关于如何在 SQL Server 的表中添加 2 个外键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中的查询创建的表中添加一行?

在SQL SERVER 的表中,插入新的字段

SQL Server 4

如何从 SQL Server 中的表中获取不匹配的数据

如何从 SQL Server 中的表中删除重复行 [重复]

sql server 数据库中,2000W行的表数据添加到新表中,新表多几个字段