sql - 违反 PRIMARY KEY 约束 PK_Casting
问题描述
我正在尝试通过脚本添加一个新的数据库,但是遇到了一些错误,已经尝试释放双字段,但这对我不起作用。
USE master
GO
IF EXISTS (SELECT * FROM sysdatabases WHERE NAME = 'MijnFilms')
BEGIN
ALTER DATABASE MijnFilms SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE MijnFilms
END
GO
-- Creatie databank Bibliotheek
CREATE DATABASE MijnFilms
GO
USE MijnFilms
GO
--Creatie tabel AUTEUR
CREATE TABLE ACTEUR
(
Acteur_id int NOT NULL,
ActeurNaam nvarchar(40),
CONSTRAINT PK_Acteur PRIMARY KEY(acteur_id)
)
GO
--Creatie tabel CATEGORIE
CREATE TABLE CASTING
(
Film_id int NOT NULL,
Acteur_id int NOT NULL,
CONSTRAINT PK_Casting PRIMARY KEY(Film_id),
CONSTRAINT FK1_Casting FOREIGN KEY(Acteur_id) REFERENCES Acteur(acteur_id)
)
GO
--Creatie tabel BOEKEN
CREATE TABLE FILM
(
Film_id int NOT NULL,
Titel nvarchar(40),
Jaar smallint,
Score int,
Stemmen int,
CONSTRAINT FK1_Film FOREIGN KEY(Film_id) REFERENCES Casting(film_id),
)
GO
--Opvullen van de tabellen met testdata
INSERT INTO ACTEUR(Acteur_id, ActeurNaam) VALUES (1, 'Tom Hanks')
INSERT INTO ACTEUR(Acteur_id, ActeurNaam) VALUES (2, 'Helen Hunt')
INSERT INTO ACTEUR(Acteur_id, ActeurNaam) VALUES (3, 'Catherine Zeta Jones')
GO
INSERT INTO CASTING (Film_id, Acteur_id) VALUES (1, 1)
INSERT INTO CASTING (Film_id, Acteur_id) VALUES (1, 2)
INSERT INTO CASTING (Film_id, Acteur_id) VALUES (2, 1)
INSERT INTO CASTING (Film_id, Acteur_id) VALUES (2, 3)
GO
INSERT INTO FILM(Film_id, Titel, jaar, Score, Stemmen) VALUES (1, 'Cast Away', 2000, 75,1)
INSERT INTO FILM(Film_id, Titel, jaar, Score, Stemmen) VALUES (2, 'The Terminal', 2004, 62,1)
GO
现在,我收到一个错误:
消息 2627,级别 14,状态 1,第 60 行
违反主键约束“PK_Casting”。无法在对象“dbo.CASTING”中插入重复键。重复键值为 (2)。
解决方案
好吧,您尝试将 a film_id
of 1
(and 2
) 插入casting
两次,但主键必须是唯一的。
您可以在这里使用复合主键,由电影的 ID 和演员的 ID 组成。
此外,电影的 ID 应该是主键film
和外键,casting
而不是相反。这需要film
在之前创建casting
。这也适用于INSERT
s -film
必须在之前casting
。
...
CREATE TABLE film
(film_id integer
NOT NULL,
titel nvarchar(40),
jaar smallint,
score integer,
stemmen integer,
CONSTRAINT pk_film
PRIMARY KEY (film_id));
CREATE TABLE acteur
(acteur_id integer
NOT NULL,
acteurnaam nvarchar(40),
CONSTRAINT pk_acteur
PRIMARY KEY (acteur_id));
CREATE TABLE casting
(film_id integer
NOT NULL,
acteur_id integer
NOT NULL,
CONSTRAINT pk_casting
PRIMARY KEY (film_id,
acteur_id),
CONSTRAINT fk1_casting
FOREIGN KEY (film_id)
REFERENCES film
(film_id),
CONSTRAINT fk2_casting
FOREIGN KEY (acteur_id)
REFERENCES acteur
(acteur_id));
...
INSERT INTO film ...
INSERT INTO acteur ...
INSERT INTO casting ...
推荐阅读
- c# - 以编程方式部署时,带有脚本任务的 SSIS 包不起作用
- mysql - 从数据库中删除,但过滤器除外
- powershell - Office 365 Admin 以编程方式运行(图形、REST 或 powershell)
- css - CSS 动画 - 鼠标移出时恢复
- python - 从 yaml 文件中获取变量时如何摆脱使用 exec
- selenium - 如何在 Selenium 上使用 cookie 在注销后恢复所有页面信息
- mysql - 连续时间查找最小/最大时间戳MySQL
- javascript - 似乎无法从捕捉承诺中恢复过来
- javascript - 使用 AJAX 从 XML 显示图像
- css - 将外部 div 缩小到缩放(转换)内部 div 的大小