¡Hola Julio!
Para ejecutar una sentencia DML en dos tablas relacionadas, debes utilizar una transacción. Una transacción te permite ejecutar varias sentencias DML como un todo, asegurando que todas se ejecuten o ninguna.
Para desvincular la llave foránea o la relación entre dos tablas, debes ejecutar una sentencia UPDATE en la tabla que contiene la llave foránea. Por ejemplo, si tienes dos tablas, "artículos" y "ventas", y la tabla "ventas" tiene una llave foránea que hace referencia a la columna "id" de la tabla "artículos", debes ejecutar una sentencia UPDATE en la tabla "ventas" para eliminar la referencia a la columna "id" de la tabla "artículos".
Aquí te muestro un ejemplo de cómo ejecutar una transacción en Java para eliminar un registro de la tabla "artículos" y desvincular la llave foránea en la tabla "ventas":
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false); // Inicia una transacción
stmt = conn.prepareStatement("DELETE FROM artículos WHERE id = ?");
stmt.setInt(1, 20);
stmt.executeUpdate();
stmt = conn.prepareStatement("UPDATE ventas SET id_artículo = NULL WHERE id_artículo = ?");
stmt.setInt(1, 20);
stmt.executeUpdate();
conn.commit(); // Confirma la transacción
} catch (SQLException e) {
if (conn != null) {
try {
conn.rollback(); // Deshace la transacción si ocurre un error
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
En este ejemplo, primero se establece una conexión a la base de datos y se inicia una transacción. Luego se ejecuta la sentencia DELETE en la tabla "artículos" y la sentencia UPDATE en la tabla "ventas". Si ocurre algún error, se deshace la transacción. Si todo va bien, se confirma la transacción.
Espero que esta respuesta te haya sido de ayuda. ¡Buenos estudios!