将数据插入表中的小问题

时间:2012-03-01 19:41:34

标签: sql oracle

这是我第一次在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,当我从上面插入相同的insert语句时,它表示错误来自“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编程的大学服务器没有保存我在那里实现的数据。当我再次放入数据并实现“注册”的数据时,它没有给我一个错误。我认为这是问题的开始。另外,如何在UNIX中保存我的SQL内容以便不再发生这种情况?

3 个答案:

答案 0 :(得分:0)

stackoverflow上等待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,并指向考试表主键。

为了能够在列中插入行,必须先将这两个记录插入到各自的表中,以便新行指向有效键。

答案 1 :(得分:0)

在表“users”或表“exam”或两者中,您没有任何具有引用键(1)的条目。

答案 2 :(得分:0)

据我所知,正在发生的事情是你试图在其他表中不存在密钥的地方插入外键。是否有一个键为1的用户行?是否有一个关键为1的考试行?如果不是因为此错误,则参照完整性会被破坏。

或许,您可能构建了错误的关系,在这种情况下,您需要从注册表中删除一个或两个FOREIGN KEY约束

更新以反映您的更新:):

如果错误来自Users表,则表示您尝试在enrolls表中为uno提交的值在uno表中不存在。您需要先将其添加到users表中:

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

完成此操作后,您现在将拥有一个uno值为1的用户记录。然后您的约束将找到匹配的值并且无错误地传递