如何创建联结表并添加索引?
Posted
技术标签:
【中文标题】如何创建联结表并添加索引?【英文标题】:How to create a junction table and add index? 【发布时间】:2018-11-04 18:34:30 【问题描述】:下面是我创建两个表的代码,由于播放列表和歌曲是多对多的关系,我继续创建一个连接表...
CREATE TABLE Playlist (
Id VARCHAR(20),
[Name] VARCHAR(50),
Create_Date DATE,
Username VARCHAR(20),
PRIMARY KEY (Id),
FOREIGN KEY (username) REFERENCES Users (username)
);
CREATE TABLE Song (
Id VARCHAR(20),
Title VARCHAR(50),
Genre VARCHAR(20),
[Length] TIME,
[Language] VARCHAR(20),
Album_Id VARCHAR(20),
Company_Id VARCHAR(20),
PRIMARY KEY (Id),
FOREIGN KEY (Company_Id) REFERENCES Company (Id),
FOREIGN KEY (Album_Id) REFERENCES Album (Id)
);
CREATE TABLE Song_Playlist (
Song_Id VARCHAR(20) NOT NULL,
Playlist_Id VARCHAR(20) NOT NULL,
PRIMARY KEY (Song_Id, Playlist_Id),
FOREIGN KEY (Song_id) REFERENCES Song (Id) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (Playlist_Id) REFERENCES Playlist (Id) ON DELETE RESTRICT ON UPDATE CASCADE
);
但是,当我尝试创建联结表时,它一直给我这个错误消息:
消息 156,级别 15,状态 1,第 5 行关键字“RESTRICT”附近的语法不正确。
我想知道如何解决这个问题,如果我想在 Song 表中为 Genre 创建索引,我该怎么做?
【问题讨论】:
这看起来不像 mysql。你确定你没有改用 SQL Server 吗? @MadhurBhaiya 我认为这不是 SQL Server,因为 SQL Server 有[ ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ]
没有 ON DELETE RESTRICT
。
是的,我使用的是 SQL 服务器。不知怎的,我打错了...
【参考方案1】:
您似乎正在使用 SQL Server(根据代码和错误消息),但来自 docs online
语法:
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ]
[ ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT ]
[ NOT FOR REPLICATION ]
删除时 无操作 |级联 |设置空 |默认设置 如果这些行具有引用关系并且引用的行已从父表中删除,则指定对更改的表中的行执行什么操作。默认为无操作。
这就是你收到错误Incorrect syntax near the keyword 'RESTRICT'
的原因,因为SQL Server 没有ON DELETE RESTRICT
【讨论】:
以上是关于如何创建联结表并添加索引?的主要内容,如果未能解决你的问题,请参考以下文章