2012-03-01 19 views
0

これは私の初めての質問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" 

私がやった研究はほとんどありません。問題は私が外部キーに入れた方法であり、私はそれらのうちの2つが必要です。このエラーを修正するにはどうすればよいですか?私はこれに対して2つの外部キーを書くべきですか?私にお知らせください。ありがとう。

Edit1: 両方の外部キーでCONSTRAINTを使用しましたが、上記の挿入ステートメントを挿入したときにエラーが「uno」から来ていると表示されます。あなたは "users"テーブルで何かが起こっていると思いますか?ここで私は、ユーザーテーブルのために持っているものです。

試験の
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プログラミングを使っている大学のサーバーは、私がそこで実装したデータを保存しませんでした。データを再入力して「登録」のデータを実装すると、エラーが表示されませんでした。私はそれがまず問題だったと思う。また、UNIXでSQLのものを保存するにはどうすればよいのでしょうか?

+0

ユーザーと試験が挿入される前に、試験にユーザーを登録しようとしていますか? –

+0

コードを投稿するときは、4つのスペースでインデントし、ブロックを強調表示して '{} 'ボタンまたは' CTRL-K'を押してください。それは他の手段でフォーマットを強制しようとするよりもはるかにうまく機能し、一般に構文ハイライトを追加します。また、タイトルから「SQL」を削除しました。それがタグ付けシステムの目的です。 –

+0

あなたは 'CONSTRAINT ...'で外部キーを導入することもできますし、PKsでもかまいません。失敗した制約を*命名する* –

答えて

0

私が見ている限り、他のテーブルにキーが存在しない外部キーを挿入しようとしています。キーが1のユーザー行がありますか?キーが1の検査行はありますか?このエラーでない場合は、参照整合性が失われます。

かは、多分あなたはあなたのUPDATE :)を反映するためには、1つまたは登録するテーブル

UPDATEからFOREIGN KEY制約(複数可)の両方を削除する必要があり、その場合には、間違った関係を、構築されました

エラーがUsersテーブルから来ている場合は、enrollsテーブルのunoに送信しようとしている値がunoテーブルに存在しないことを意味します。あなたは最初のユーザーテーブルにそれを追加する必要があります。

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

これが完了すると、あなたが今1のUNO値をユーザーレコードを持っています次に、あなたの制約が一致する値を検索し、エラーなしで通過します

0

5分待ってからstackoverflow?

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,..); 

説明:

私が最初に(FOREIGN KEY CONSTRAINT経由)enrollsが参照している二つのテーブルで探しています。 unoはユーザーのPRIMARY KEY COLUMNを指し、試験テーブルの主キーはenoです。

列に行を挿入するには、新しい行が有効なキーを指すように、これらの他の2つのレコードを最初にそれぞれの表に挿入する必要があります。

0

テーブル「users」またはテーブル「exam」のいずれか、またはその両方で、参照キー(1)を持つエントリがありません。

関連する問題