我试图通过一个脚本添加一个新的数据库,但是出现了一些错误,已经尝试释放双字段,但是这对我不起作用。
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\u casting”。无法在对象“dbo.casting”中插入重复键。重复的键值是(2)。
2条答案
按热度按时间vdgimpew1#
好吧,你想插入一个
film_id
的1
(和2
)进入casting
两次,但主键必须是唯一的。你可以在这里使用一个复合主键,由电影和演员的id组成。
而且电影的id应该是电影的主键
film
还有外键casting
不是相反。这需要film
在之前创建casting
不过。这也适用于INSERT
s--film
必须在casting
.roqulrg32#
您正在创建带有约束的表
然后在表中插入重复的记录
您需要移除约束,或者需要通过在上创建键来创建复合键
FILM_ID
以及ACTEUR_ID