本篇演示刪除操作的存儲過程創建,包含表結構定義、外鍵級聯刪除設置,以及 Java 調用刪除後驗證數據移除。
-- 創建主表
drop table 學生基本信息表;
create table 學生基本信息表 (
StuID int primary key,
StuName varchar(10),
StuAddress varchar(20)
);
insert into 學生基本信息表 values(1, '三毛', 'wuhan');
insert into 學生基本信息表 values(2, '三毛', 'wuhan');
-- 創建從表,外鍵級聯刪除/更新
create table 學生成績表 (
StuID int,
Chinese int,
PyhSics int,
foreign key(StuID) references 學生基本信息表(StuID)
on delete cascade
on update cascade
);
insert into 學生成績表 values(1, 99, 100);
insert into 學生成績表 values(2, 99, 100);
-- 刪除存儲過程
create procedure delePro
@StuID int
as
delete from 學生基本信息表 where StuID = @StuID;
-- 查詢存儲過程(驗證用)
create procedure selePro
as
select * from 學生基本信息表;
import java.sql.*;
public class ProcedureTest {
public static void main(String args[]) throws Exception {
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
Connection conn = DriverManager.getConnection("jdbc:odbc:mydata", "sa", "");
// 1. 調用刪除存儲過程,刪除 StuID=1
CallableStatement c = conn.prepareCall("{call delePro(?)}");
c.setInt(1, 1);
c.execute();
// 2. 驗證:調用查詢過程
c = conn.prepareCall("{call selePro}");
ResultSet rs = c.executeQuery();
while (rs.next()) {
String stu = rs.getString("StuID");
String name = rs.getString("StuName");
String add = rs.getString("StuAddress");
System.out.println("學號: " + stu + " 姓名: " + name + " 地址: " + add);
}
c.close();
conn.close();
}
}
on delete cascade 確保刪除主表記錄時,從表關聯記錄自動刪除,維護引用完整性。delePro 後,查詢 selePro 僅剩 StuID=2 的記錄,證明級聯生效。int 參數,setInt(1, 1) 設置。生產系統常採用軟刪除(增加 is_deleted 標記位或 deleted_at 時間戳),而非物理刪除,優勢:
若必須硬刪除,請確保具備完整備份與回滾方案。