Небольшие проблемы с вставкой данных в таблицу - PullRequest
0 голосов
/ 01 марта 2012

Я впервые задаю свой вопрос в stackoverflow.Я работаю над проектом базы данных, и у меня есть некоторые проблемы, касающиеся вставки данных в мою таблицу.Сначала вот таблица, которую я создал с помощью этого оператора:

CREATE TABLE enrolls(
    uno NUMBER(5),
    eno NUMBER(5),
    startTime DATE,
    finishTime DATE,
    CONSTRAINT enrolls_pk PRIMARY KEY(uno, eno),
    FOREIGN KEY(uno) REFERENCES users(uno),
    FOREIGN KEY (eno) REFERENCES exam(eno)
);`

Вот инструкция вставки:

INSERT INTO enrolls(uno,eno,startTime,finishTime)
VALUES 
   (1,1,to_date('2012/02/15 10:00:00', 'yyyy/mm/dd hh24:mi:ss'),
        to_date('2012/02/22 10:00:00', 'yyyy/mm/dd hh24:mi:ss'));`

Я получаю следующую ошибку:

"ORA-02291: integrity constraint (username.SYS_C0093024) violated - parent key
not found"

Исходя из небольшого исследования, которое я провел, проблема заключалась в том, как я вставил внешний ключ, и мне нужно два из них.Как я могу исправить эту ошибку?Как еще можно написать два внешних ключа для этого?Пожалуйста, дайте мне знать.Спасибо.

Edit1: я использовал CONSTRAINT на обоих внешних ключах, и когда я вставил один и тот же оператор вставки сверху, он говорит, что ошибка исходит от "uno".Как вы думаете, что-то происходит с таблицей «пользователи»?Вот что у меня есть для таблицы пользователей:

CREATE TABLE users(
uno NUMBER(5), 
email VARCHAR2(64), 
password VARCHAR2(64), 
fname VARCHAR2 (64) NOT NULL, 
lname VARCHAR2 (64) NOT NULL, 
address1 VARCHAR2 (64), 
address2 VARCHAR2(64), 
city VARCHAR2(64), 
state VARCHAR2(64), 
zip NUMBER(5), 
CONSTRAINT users_pk PRIMARY KEY(uno)
);

Один для экзамена:

CREATE TABLE exam(
eno NUMBER(5), 
etitle VARCHAR2(50), 
timeAllowed NUMBER (8), 
numberOfQuestionsPerPage NUMBER(3), 
CONSTRAINT exam_pk PRIMARY KEY(eno)
);

Что-то, что я исправил, или я здесь что-то не так делаю?

Edit2: Хорошо, я думаю, что понял проблему.Когда я проверял свою таблицу «пользователи», по-видимому, сервер из университета, на котором я использую свое программирование на SQL, не сохранял данные, которые я там реализовал.Когда я снова поместил данные и применил данные для "зачисления", это не дало мне ошибки.Я думаю, что это была проблема с самого начала.Кроме того, как мне сохранить свои данные SQL в UNIX, чтобы это больше не повторилось?

Ответы [ 3 ]

0 голосов
/ 01 марта 2012

Ни в таблице «пользователи», ни в таблице «экзамен», ни в обеих из них нет записи, имеющей ссылочный ключ (1).

0 голосов
/ 01 марта 2012

Насколько я понимаю, происходит то, что вы пытаетесь вставить внешние ключи там, где ключ не существует в других таблицах.Есть ли строка пользователя с ключом 1?Есть ли строка экзамена с ключом 1?Если бы не эта ошибка, ссылочная целостность нарушается.

Или, может быть, вы неправильно построили отношения, и в этом случае вам нужно удалить одно или оба ограничения FOREIGN KEY из таблицы регистрации

ОБНОВЛЕНИЕ, ЧТОБЫ ОТРАЖАТЬ ОБНОВЛЕНИЕ :):

Если ошибка происходит из таблицы «Пользователи», это означает, что значение, которое вы пытаетесь передать для uno в таблицу enrolls, не существует в таблице uno.Сначала вам нужно будет добавить это в таблицу пользователей:

INSERT INTO users VALUES (1, 'email', 'pw', 'fn', 'ln', 'add1', 'add2', 'city'
    , 'state', 'zip');

Как только это будет сделано, у вас будет запись пользователя со значением uno, равным 1. Тогда ваше ограничение найдет совпадающие значения и передастбез ошибок

0 голосов
/ 01 марта 2012

5 минут ожидания на стеке потока?

desc users;
desc exam;

insert into users(uno,...) VALUES (1, ...);
insert into exam(eno,...) VALUES (1, ...);
INSERT INTO enrolls(uno,eno,startTime,finishTime) VALUES (1,1,..);

Объяснение:

Сначала я смотрю на две таблицы, на которые ссылается enrolls (через FOREIGN KEY CONSTRAINT). uno указывает на PRIMARY KEY COLUMN для пользователей, а eno - на первичный ключ таблиц экзаменов.

Чтобы иметь возможность вставить строку в столбцы, эти две другие записи должны быть сначала вставлены в соответствующие таблицы, чтобы новая строка указывала на действительные ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...