SQL 查询返回已删除的行
SQL Query Returning Deleted Rows
目前我的数据库中有以下 table,其中包含规定的数据:
SUPPORT_USER_ROLES TABLE:
USER_ID | ROLE_ID
1 | 1
1 | 2
2 | 2
*2* | *1*
底部一行,用'*'标记的已经被删除,在SQL开发者中没有它的迹象。
我现在运行以下查询:
SELECT su.USER_ID
, su.USERNAME
, sur.ROLE_ID
, sr.ROLE_NAME
FROM support_users su
, support_users_roles sur
, support_roles sr
WHERE su.USER_ID = sur.USER_ID
AND su.IS_ACTIVE != ‘N’
AND sr.ROLE_ID = sur.ROLE_ID
AND sr.IS_ACTIVE != ‘N’
它返回以下内容:
{ (USER_ID : 1, ROLE_ID : 1),
(USER_ID : 1, ROLE_ID : 2),
(USER_ID : 2, ROLE_ID : 1),
(USER_ID : 2, ROLE_ID : 2) }
如你所见,它仍然给我:
(USER_ID : 2, ROLE_ID : 1)
即使它不再存在于任何地方。
我正在使用 Java、JSF、PrimeFaces、SQL Developer、Hibernate、Weblogic 和 Eclipse IDE。我不确定我是否在这里遗漏了很多东西并且需要 refresh/update 某处的东西。
我以前没有这个所以我现在很困惑:S
非常感谢任何帮助!
James,如果该行在 SQL 开发人员中被删除但未提交,它可能在 SQL 开发人员界面中显示为不存在,但实际上仍然存在于 table 直到明确提交删除命令。
这可以通过单击 SQL Developer 中的提交图标或简单地执行以下命令来实现:-
commit;
了解问题后发表评论作为答案
请确保使用 commit
来自与您 运行 delete
语句所在的程序相同的连接。从应用程序中删除并在 SQL 开发人员上提交将不起作用。
现在您可以做以下两件事之一
(1) 更改您的代码,只需 运行 commit
一次,然后确保在每个 DML statement
之后使用 commit
。
(2) delete
和commit
一起使用。如果数据已经是deleted
,则不会再次删除,之后会发生commit
。如果它没有被删除,那么 if 将被删除并提交。
目前我的数据库中有以下 table,其中包含规定的数据:
SUPPORT_USER_ROLES TABLE:
USER_ID | ROLE_ID
1 | 1
1 | 2
2 | 2
*2* | *1*
底部一行,用'*'标记的已经被删除,在SQL开发者中没有它的迹象。
我现在运行以下查询:
SELECT su.USER_ID
, su.USERNAME
, sur.ROLE_ID
, sr.ROLE_NAME
FROM support_users su
, support_users_roles sur
, support_roles sr
WHERE su.USER_ID = sur.USER_ID
AND su.IS_ACTIVE != ‘N’
AND sr.ROLE_ID = sur.ROLE_ID
AND sr.IS_ACTIVE != ‘N’
它返回以下内容:
{ (USER_ID : 1, ROLE_ID : 1),
(USER_ID : 1, ROLE_ID : 2),
(USER_ID : 2, ROLE_ID : 1),
(USER_ID : 2, ROLE_ID : 2) }
如你所见,它仍然给我:
(USER_ID : 2, ROLE_ID : 1)
即使它不再存在于任何地方。
我正在使用 Java、JSF、PrimeFaces、SQL Developer、Hibernate、Weblogic 和 Eclipse IDE。我不确定我是否在这里遗漏了很多东西并且需要 refresh/update 某处的东西。
我以前没有这个所以我现在很困惑:S
非常感谢任何帮助!
James,如果该行在 SQL 开发人员中被删除但未提交,它可能在 SQL 开发人员界面中显示为不存在,但实际上仍然存在于 table 直到明确提交删除命令。
这可以通过单击 SQL Developer 中的提交图标或简单地执行以下命令来实现:-
commit;
了解问题后发表评论作为答案
请确保使用 commit
来自与您 运行 delete
语句所在的程序相同的连接。从应用程序中删除并在 SQL 开发人员上提交将不起作用。
现在您可以做以下两件事之一
(1) 更改您的代码,只需 运行 commit
一次,然后确保在每个 DML statement
之后使用 commit
。
(2) delete
和commit
一起使用。如果数据已经是deleted
,则不会再次删除,之后会发生commit
。如果它没有被删除,那么 if 将被删除并提交。