无法删除或更新父行 - Java
Posted
技术标签:
【中文标题】无法删除或更新父行 - Java【英文标题】:Cannot delete or update a parent row - Java 【发布时间】:2018-07-10 20:51:55 【问题描述】:我的老师正在尝试删除学生使用的行。 但是我怎么能删除这一行呢? 如果老师想删除这节课,无论如何都应该删除它?
这是我用于删除查询的功能:
con = DriverManager.getConnection ("jdbc:mysql://localhost:3307/lessons","root","");
String query = "DELETE FROM lessons WHERE Number= ?";
PreparedStatement pst = con.prepareStatement(query);
pst.setString(1,txtFieldNumber.getText());
pst.executeUpdate();
.
CREATE TABLE UserLogin(
Number INTEGER,
UserNumberINTEGER,
FOREIGN KEY (Number) REFERENCES termin(Number),
FOREIGN KEY (UserNumber) REFERENCES User(UserNumber)
);
CREATE TABLE lessons(
Number INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
LName VARCHAR(20)
);
CREATE TABLE User(
Name VARCHAR (20),
UserNUmber INTEGER NOT NULL PRIMARY KEY
);
【问题讨论】:
请添加更多上下文 @PankajGadge 更多上下文是什么意思 你的NUMBER
专栏int
有没有机会?
@naveenmarri 是的,它是一个整数,它是一个主键
lessons
表的声明在哪里,您所指的父表是哪一个?
【参考方案1】:
您必须使用 Number
参数的相同值以正确的顺序执行 2 次单独的删除。
首先从 UserLogin 中删除
DELETE FROM UserLogin WHERE Number = ?
然后使用你今天的命令
DELETE FROM lessons WHERE Number = ?
如果您想确保两个语句都能正确执行,您可以使用手动提交 like this
【讨论】:
【参考方案2】:当基础列为int
时,您不能使用setString
假设您的txtFieldNumber.getText()
返回String
格式的数字,请尝试以下操作
pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));
更新:
根据您的问题编辑,您似乎首先尝试删除 lessons
中的主键,该主键在 UserLogin
表中被引用。这就是您遇到错误的原因。
要克服这个问题,您可能需要先删除UserLogin
表中的行,然后删除lessons
表中的相应行。
String query = "DELETE FROM UserLogin WHERE Number= ?";
PreparedStatement pst = con.prepareStatement(query);
pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));
pst.executeUpdate();
String query2 = "DELETE FROM lessons WHERE Number= ?";
pst = con.prepareStatement(query2);
pst.setInt(1,Integer.parseInt(txtFieldNumber.getText()));
pst.executeUpdate();
这应该可以解决您的问题
【讨论】:
谢谢。但这是否适用于无法删除更新父行的问题? “不能删除更新父行”是什么意思?我给出的解决方案有效吗? 我正在尝试删除学生使用的行。但是,如果老师想删除该行,无论如何都应该为学生删除它。如果此时尝试删除该行,我收到消息“无法删除更新父行”:/ 我们需要lessons
表和引用该表上列的constraints
的表结构(列),然后我们才能知道您为什么无法delete
特定记录.
您首先需要delete
被引用的行,然后delete
父行。我猜你需要两个表中的两个delete
语句到delete
以上是关于无法删除或更新父行 - Java的主要内容,如果未能解决你的问题,请参考以下文章
Laravel SQLSTATE[23000] 无法删除或更新父行:外键约束失败