【发布时间】:2021-07-26 18:34:03
【问题描述】:
在删除 CASCADE 删除的行时,是否有任何选项(甚至是 DB 客户端)需要确认。例如:
从 id=1 的目录中删除
警告:这还将删除 CASCADE 92,358 个产品和 142 个目录历史记录。你确定吗? (如果有,暂时开启 ALLOW_CASCADE_DELETES 或者添加 WITH CASCADE 到查询中)
我更喜欢不需要遵循 db 架构中的特定规则并与 MySQL 一起使用的解决方案。 (或者,如果有一种方法可以强制 FK 删除,同时一般将 CASCADE 保留在模式之外,那么这也是一个不错的选择。)
【问题讨论】:
-
DBMS 是关于数据处理的,它没有用户交互。所有用户交互都应出现在应用程序级别,并带有警告消息、确认等。
-
如果您想达到您的要求:1. 首先获取记录/计数,显示在屏幕上以供用户接受,然后点击确定 - 删除记录。
-
@astentx MySQL 可以支持一个选项以在需要时支持便利性并在默认情况下降低风险,这是完全合理的。我怀疑这是不可能的,但希望......数据处理工具友好是可以的。
-
@EdwinEvans 也许吧,但是 DBMS 是一个后端,所以它不应该允许业务用户直接在数据库内部进行一些修改(尽管 SQL 是作为“用户友好的”开发的)。并且由于您的用户可以直接在数据库中删除某些内容,因此他们应该具有很高的特权。这反过来又假设这样的用户不是好奇的路人,而是有明智意图的人。听起来很合理,但 IDE 本身并不是 SQL 引擎,因此没有提供警告的媒介:事务应该成功完成还是应该失败,没有中间状态。