在多个表中创建多个元组

时间:2012-07-24 14:48:11

标签: java mysql jdbc foreign-keys tuples

我有一个关于使用Java在多个表中创建多个元组的问题。

这是我的表格。

create table department(

dept_name       varchar(20) primary key, 
building        varchar(15), 
budget      numeric(12,2)
);

create table student
(ID             int, 
 name           varchar(20) not null, 
 dept_name      varchar(20), 
 tot_cred       numeric(10,0),
 primary key (ID),
 foreign key (dept_name) references department(dept_name)
);

我想要完成的是java程序将提示用户

“你想在部门表中有多少元组?” 用户:1000。 “在Department表中创建了1000个元组。”

“你在学生桌上想要多少元组?” 用户:500。 “在学生表中创建了500个元组。”

现在我可以将一个元组插入部门,所以说

"Insert into department ('CSI', 'TownHall', '120000')";

然后从这里开始

 Insert into student (id, name, dept_name,tot_cred)
             select '"+counts+"', 'Student"+counts+"', dept_name, '10' 
             from department      
             where    dept_name='CSI'.

Counts ++在while循环中,因此没有重复的PK。

所以我可以在学生表中创建10000个元组,但我不能在Department表中创建超过1个元组,因为CSI不能重复。

但是如果我不在department表中插入至少一个元组,那么我将失去外键约束。

有什么想法吗?

PS。我不是在这里为你们做代码只是需要一个想法

布兰登

1 个答案:

答案 0 :(得分:0)

不要将dept_name作为primary key,而是创建另一列DEPT_ID并将其设置为主键。你可以用同样的方式增加它。

另外,请考虑使用PreparedStatement进行SQL更新

通常,你的FK会指向另一张桌子的PK。因此,当您将DEPT_ID创建为主键时,您还需要修改学生架构以反映此更改

编辑:根据您的要求,您可以执行此类操作(尽管我不知道您的确切要求)&假设上述变化,你可以做这样的事情

像这样创建一个PreparedStatement

PreparedStatement pstmt = con.prepareStatement(INSERT INTO student(id, name, dept_id,tot_cred) values(?,?,?,?)");

既然您知道了自己的部门数量,那么现在可以创建一个循环来将元组插入到department表中,然后使用这些信息插入到学生表中,对吧? (这听起来更像是一个家庭作业,所以我会留给你思考如何做这个部分