2014-11-30 4 views
-2
CREATE TABLE Editor (
UsernameID VARCHAR (30), 
EditorName VARCHAR (30), 
EMail VARCHAR (30), 
DateOfBirth DATE, 
BlogTitle VARCHAR(30), 
PRIMARY KEY (UsernameID)); 

INSERT INTO Editor VALUES 
('Mdbuzzer','Joshua', '[email protected]', '1995-03-15', 'Nearly Bound'); 

INSERT INTO Editor VALUES 
('Kally32','Kally', '[email protected]', '1993-10-13', 'Tomorrows War'); 
SELECT * FROM Editor; 



CREATE TABLE Post 
(UsernameID VARCHAR (30), 
PostID INT, 
BlogTitle VARCHAR (30), 
PostTitle VARCHAR (30), 
CategoryID INT, 
TimeofPost VARCHAR (20), 
PRIMARY KEY(PostID), 
FOREIGN KEY (UsernameID) REFERENCES Editor (UsernameID)); 

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War', 'Mystery', '4', '12:03pm'); 

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War', 'Let It Shine','2','10:05pm'); 

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War','Two Can Play That Game','2', '12:00pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2','Nearly Bound', 'Goal','3', '10:05pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2','Nearly Bound','Life After Death','4', '12:03pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2', 'Nearly Bound','Times Up','1', '14:06pm'); 

SELECT * FROM Post; 

Каждый раз, когда я пытаюсь запустить этот скрипт, я все время получаю сообщение об ошибке «1» для ключевого «первичного», и я действительно не понимаю, как исправить егоDuplicate Entry '1' for key 'PRIMARY' SQL

ответ

1

Проблема заключается в том, что вы вставляете несколько строк в таблицу POST с PRIMARY KEY of 1. Если вы пытаетесь реализовать первичный ключ, он должен быть уникальным.

Так что:

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War', 'Mystery', '4', '12:03pm'); 

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War', 'Let It Shine','2','10:05pm'); 

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War','Two Can Play That Game','2', '12:00pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2','Nearly Bound', 'Goal','3', '10:05pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2','Nearly Bound','Life After Death','4', '12:03pm'); 

INSERT INTO Post VALUES 
('Mdbuzzer','2', 'Nearly Bound','Times Up','1', '14:06pm'); 

Может быть изменено на что-то вроде этого:

INSERT INTO Post VALUES 
('Kally32','1','Tomorrows War', 'Mystery', '4', '12:03pm'); 

INSERT INTO Post VALUES 
('Kally32','2','Tomorrows War', 'Let It Shine','2','10:05pm'); 

INSERT INTO Post VALUES 
('Kally32','3','Tomorrows War','Two Can Play That Game','2', '12:00pm'); 
1

Если вы сделаете столбец первичным ключом, то каждое значение в столбце должно быть уникальным. У вас уже есть один экземпляр «1» в POST_ID колонке, когда вы добавляете первый кортеж:

('Kally32','1','Tomorrows War', 'Mystery', '4', '12:03pm'); 

и если вы пытаетесь добавить еще один кортеж с экземпляром «1» в колонке POST_ID, такие как:

('Kally32','1','Tomorrows War', 'Let It Shine','2','10:05pm'); 

вы получите сообщение об ошибке.

1

Вы объявили PostId быть первичным ключом POST.

Когда вы используете insert, вы всегда должны включать столбцы. Таким образом, это первые две вставки в таблицу:

INSERT INTO Post(UsernameID, PostID, BlogTitle, PostTitle, CategoryID, TimeofPost) 
    VALUES('Kally32','1','Tomorrows War', 'Let It Shine','2','10:05pm'); 

INSERT INTO Post(UsernameID, PostID, BlogTitle, PostTitle, CategoryID, TimeofPost) 
    VALUES('Kally32','1','Tomorrows War','Two Can Play That Game','2', '12:00pm'); 

Вы устанавливаете PostId к тому же значению, 1, в обоих случаях. Отсюда и ошибка.

я ожидал бы код выглядеть следующим образом:

CREATE TABLE Post (
    UsernameID VARCHAR (30), 
    PostID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    BlogTitle VARCHAR (30), 
    PostTitle VARCHAR (30), 
    CategoryID INT, 
    TimeofPost VARCHAR (20), 
    FOREIGN KEY (UsernameID) REFERENCES Editor (UsernameID) 
); 

INSERT INTO Post(UsernameID, BlogTitle, PostTitle, CategoryID, TimeofPost) 
    VALUES('Kally32', 'Tomorrows War', 'Let It Shine', 2, '10:05pm'); 
+0

Да. Это очень типичный подход. –