我有一个关于使用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。我不是在这里为你们做代码只是需要一个想法
布兰登
答案 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表中,然后使用这些信息插入到学生表中,对吧? (这听起来更像是一个家庭作业,所以我会留给你思考如何做这个部分)