当前位置: 首页 > 面试题库 >

如何为postgres编写DELETE CASCADE?

李宜然
2023-03-14
问题内容

我正在手动为postgres构造DELETE CASCADE语句。

我有一个“交易”和一个“切片”表,如下所示:

    Table "public.slice"
  Column  | Type | Modifiers 
----------+------+-----------
 id       | text | not null
 name     | text | 
Referenced by:
    TABLE "transaction" CONSTRAINT "transaction_slice_id_fkey" FOREIGN KEY (slice_id) REFERENCES slice(id)
 Table "public.transaction"
  Column  | Type | Modifiers 
----------+------+-----------
 id       | text | not null
 slice_id | text | 
Referenced by:
    TABLE "classification_item" CONSTRAINT "classification_item_transaction_id_fkey" FOREIGN KEY (transaction_id) REFERENCES transaction(id)
Table "public.classification_item"
     Column     | Type | Modifiers 
----------------+------+-----------
 id             | text | not null
 transaction_id | text | 
Foreign-key constraints:
    "classification_item_transaction_id_fkey" FOREIGN KEY (transaction_id) REFERENCES transaction(id)

假设我要删除名称为“ my_slice”的切片所引用的所有事务和category_item。我需要写些什么?

=# delete from classification_item where transaction_id= #...? 
=# delete from transaction where slice_id= #...? 
=# delete from slice where name='my_slice';

问题答案:

万一您不能做别人建议的事情:

begin;
delete from classification_item where transaction_id in (select id from "transaction" where slice_id = (select id from slice where name = 'my_slice'));
delete from "transaction" where slice_id in (select id from slice where name='my_slice');
delete from slice where name='my_slice';
commit;


 类似资料:
  • 问题内容: 我在本地运行MySQL数据库以进行开发,但是部署到使用Postgres的Heroku。Heroku处理几乎所有内容,但是不区分大小写的Like语句变得区分大小写。我可以使用iLike语句,但是我的本地MySQL数据库无法处理该语句。 编写与MySQL和Postgres兼容的不区分大小写的查询的最佳方法是什么?还是我需要根据与我的应用程序交谈的数据库编写单独的Like和iLike语句?

  • 我想写一个小游戏,我可以用W,a,S,D键在JavaFX面板上移动一个球 我有一个和但是我不知道如何编写一个,如果我按D,它将计算。 我必须做什么?

  • 问题内容: 有 DataFrame.to_sql 方法,但仅适用于mysql,sqlite和oracle数据库。我无法传递给此方法postgres连接或sqlalchemy引擎。 问题答案: 从pandas 0.14(2014年5月发行)开始,支持postgresql。该模块现在用于支持不同的数据库风格。您可以为PostgreSQL数据库传递sqlalchemy引擎(请参阅docs)。例如: 您是

  • 我正在为授权服务器开发一个管理用户界面。其中一个功能是显示登录用户的列表,我们通过查询存储当前发布的刷新令牌的数据库表来实现这一点。用户可以从多个设备登录到同一个应用程序,生成多个令牌。目前的要求不是按设备细分此视图,而是如果用户已登录,则它们将显示在列表中。如果我们撤销访问权(此UI的其他要求之一),那么所有设备的刷新令牌都将被撤销。 不管怎样,最让我困惑的是这个问题。我编写这个查询是为了收回指

  • 问题内容: 如何编写Android Studio插件? 我一直在寻找文档,但是很遗憾,文档很少或很差,所以可以推荐哪些文章? Eclipse或IntelliJ IDEA插件可以在Android Studio中使用吗? 问题答案: 由于Android Studio基于IntelliJIDEA,因此IntelliJ文档是一个很好的起点: Jetbrains插件开发

  • 问题内容: 如何仅为IE 11破解或编写CSS?我有一个在IE 11中看起来很糟糕的网站。我只是在这里和那里搜索,但尚未找到任何解决方案。 是否有任何CSS选择器? 问题答案: 结合使用Microsoft特定的CSS规则来过滤IE11: 之所以这样的过滤器,是因为以下原因: 当用户代理无法解析选择器时(即,它不是有效的CSS 2.1),它必须忽略选择器以及随后的声明块(如果有)。