首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >违反主键约束PK_Casting

违反主键约束PK_Casting
EN

Stack Overflow用户
提问于 2020-05-30 10:55:10
回答 2查看 155关注 0票数 0

我正试图通过脚本添加一个新的数据库,但是出现了一些错误,已经尝试释放了双字段,但这对我来说不起作用。

代码语言:javascript
复制
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

现在,我收到一个错误:

Msg 2627,14级,状态1,第60行

违反主键约束'PK_Casting‘。无法在对象'dbo.CASTING‘中插入重复键。重复的键值是(2).

EN

回答 2

Stack Overflow用户

发布于 2020-05-30 11:07:39

好吧,您正在尝试将film_id of 1 (和2)插入casting两次,但是主键必须是唯一的。

您可以在这里使用一个复合主键,包括电影的主键和演员的ID。

另外,胶片的ID应该是film中的主键,在casting中应该是外键,而不是相反。但是,这需要在film之前创建casting。这也适用于INSERTs -- film必须先于casting

代码语言:javascript
复制
...
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 ...
票数 1
EN

Stack Overflow用户

发布于 2020-05-30 11:03:38

正在创建带有约束的表。

代码语言:javascript
复制
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

然后在表中插入重复的记录。

代码语言:javascript
复制
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)

您需要删除约束,或者需要通过在FILM_IDACTEUR_ID上创建键来创建组合键。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62101386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档