gpt4 book ai didi

mysql - 如何将一个表中的主键值插入到另一个表中的外键列?

转载 作者:行者123 更新时间:2023-11-29 19:49:09 25 4
gpt4 key购买 nike

我对 SQL 和编程很陌生,所以如果答案很明显,请耐心等待。我有一张名为“tickets”的表,其中包含主键ticket_id。我还有另一个名为“contact_info”的表,它存储创建票证的人的联系信息。在此表中,ticket_id 是一个称为ticket_number 的外键。用户通过 GUI 插入票证,并且 Ticket_number 在数据库中自动递增。如何选择ticket_number并将其插入到包含创建该ticket的人员的contact_info的行中?

这是现在的代码,它没有达到我的预期:

try{
//Open a connection
System.out.println("Connecting to a selected database...");
this.connection = DriverManager.getConnection(url, username, password);
System.out.println("Connected database successfully...");

//Execute a query
System.out.println("Inserting records into the table...");
PreparedStatement pstmt = connection.prepareStatement(" INSERT INTO s_fuse_ticket_table "
+ " (summary, status, severity, classification, type, internal_notes, description, assignees) "
+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

if(summary.getText().equals("")){
throw new SQLException("Summary cannot be blank");
}
pstmt.setString(1, summary.getText());
pstmt.setString(2, status.getSelectionModel().getSelectedItem().toString());
pstmt.setString(3, severity.getSelectionModel().getSelectedItem().toString());
if(classification.getSelectionModel().getSelectedItem().toString().equals("Make a Selection")){
throw new SQLException("Please select a classification");
}
pstmt.setString(4, classification.getSelectionModel().getSelectedItem().toString());
if(type.getSelectionModel().getSelectedItem().toString().equals("Make a Selection")){
throw new SQLException("Please select a type");
}
pstmt.setString(5, type.getSelectionModel().getSelectedItem().toString());
pstmt.setString(6, internalNotes.getText());
pstmt.setString(7, description.getText());
pstmt.setString(8, assignee.getSelectionModel().getSelectedItem().toString());
pstmt.executeUpdate();

//Execute a query
System.out.println("Inserting records into the table...");
PreparedStatement pstmt2 = connection.prepareStatement(" INSERT INTO s_fuse_contact_info_table "
+ " (ticket_number, email, last_name, first_name) "
+ " VALUES (?, ?, ?, ?)");

pstmt2.setString(1, ("SELECT ticket_id FROM s_fuse_ticket_table"));
/*if(!email.getText().contains("@") && !email.getText().contains(".")){

}*/
pstmt2.setString(2, email.getText());
pstmt2.setString(3, lname.getText());
pstmt2.setString(4, fname.getText());
pstmt2.executeUpdate();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
{
connection.close();
}
}catch(SQLException se){
}// do nothing
try{
if(connection!=null)
{
connection.close();
}
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");

最佳答案

不同的 DBMS 有不同的方法来执行此操作 - 请参阅 this question一个非常全面的列表。

另一种方法是使用事务。使用适当隔离级别(可重复读取或可序列化)的 MVCC DBMS,当您启动新连接时,您将拥有自己的数据库 View ,因此您可以 INSERT INTO 主表,然后 SELECT 与您的插入内容相匹配的最新行,并确信它属于您。无论如何,将这样的插入捆绑在一起是一个好主意,因为它可以防止任何不一致的数据进入系统 - 只需确保您之后提交即可!

关于mysql - 如何将一个表中的主键值插入到另一个表中的外键列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com