创建两个表,其外键互相引用

2024-01-12

在 Oracle SQL、SQL Developer 中:我尝试创建两个表,每个表都有一个引用另一个表的主键的外键。

使用我的逻辑,我无法设置外键引用,因为另一个表尚不存在。

以下是我如何构建它的总体思路:

CREATE TABLE table1 
(
    column1 datatype PRIMARY KEY NOT NULL,
    column2 datatype NOT NULL,
    column3 datatype NOT NULL,

    CONSTRAINT fk_keyname 
        FOREIGN KEY (colmn3)
        REFERENCES otherTable (column3)
);

CREATE TABLE table2 
(
    column1 datatype PRIMARY KEY NOT NULL,
    column2 datatype NOT NULL,
    column3 datatype NOT NULL,

    CONSTRAINT fk_keyname2
        FOREIGN KEY (colmn3)
        REFERENCES otherTable2 (column3)
);

我收到错误

ORA-00942: 表或视图不存在

我之前已经通过首先创建父表解决了这个问题,但是由于它们都相互引用,所以我对这里需要做的事情感到不知所措,因为在这种特殊情况下必须相互引用。


您可以先创建表,然后创建 FK。例如:

create table table1 (
  column1 int primary key not null,
  column2 int not null,
  column3 int not null
);

create table table2 (
  column1 int primary key not null,
  column2 int not null,
  column3 int not null,
  constraint fk2
    foreign key (column3)
    references table1 (column1)
);

alter table table1 add constraint fk1
   foreign key (column3)
   references table1 (column1);

即使将创建表,您也无法在其中插入数据,因为约束将阻止您创建不指向其他[不存在]行的行。为了插入数据,您需要将约束创建为“可延迟”。这是improvedSQL脚本:

create table table1 (
  column1 int primary key not null,
  column2 int not null,
  column3 int not null
);

create table table2 (
  column1 int primary key not null,
  column2 int not null,
  column3 int not null,
  constraint fk2
    foreign key (column3)
    references table1 (column1) deferrable initially deferred
);

alter table table1 add constraint fk1
   foreign key (column3)
   references table1 (column1) deferrable initially deferred;

现在,请确保在事务边界之间插入所有涉及的表的行。现在将检查约束仅在交易结束时而不是在每个插入/修改/删除的行上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建两个表,其外键互相引用 的相关文章

  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • 如何修复“Oracle.EntityFrameworkCore 类型中的方法‘get_Info’没有实现”。

    我正在尝试通过 EW 连接到 Oracle DB 论方法OnConfiguring是错误 System TypeLoadException 程序集 Oracle EntityFrameworkCore Version 2 0 19 1 Cu
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • postgresql 中的锁定表

    我有一个名为 games 其中包含一个名为 title 该列是唯一的 数据库中使用PostgreSQL 我有一个用户输入表单 允许他插入新的 game in games 桌子 插入新游戏的功能会检查之前输入的游戏是否存在 game 与相同的
  • 在 SQL Server 中通过标准差消除异常值

    我试图通过标准差消除 SQL Server 2008 中的异常值 我只想要特定列中包含该列平均值的 1 标准差范围内的值的记录 我怎样才能做到这一点 如果您假设事件呈钟形曲线分布 则只有 68 的值与平均值相差 1 个标准差以内 95 的值
  • Postgres 中 -Infinity 和 Infinity 的适当值

    在一种情况下 我们必须在 Postgres DB 中存储 无穷大和 无穷大的值 应该考虑什么合适的值 如果没有 请建议最合适的替代方案 你实际上可以使用 infinity and infinity for FLOAT4 and FLOAT8
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 按原样将 SQL 保存到 YAML

    我想以我自己的格式将 SQL 保存到 YAML 文件 如下所示 1 sql SELECT DISTINCT p id product p price AS price sp reduction AS discount FROM 我使用 YA
  • 如何在 SQL Server 中保持数据行内

    我正在尝试找出如何检测数据是否在VARCHAR n SQL Server 2008 中的列存储在行内或行外 有谁知道如何做到这一点 另外 如果我们需要数据 有没有办法将数据保持在行中 要查看某个值是行内还是行外 您可以使用DBCC PAGE
  • 手动更改postgresql中查询的执行计划?

    是否可以在postgresql中手动更改执行计划的操作顺序 例如 如果我总是想在过滤之前进行排序操作 尽管这在 postgresql 的正常使用中没有意义 是否可以通过例如手动强制执行该操作改变运营的内部成本 如果我实现自己的功能呢 是否可
  • sql join 告诉我 ID 是否存在于其他表中

    我有 2 张桌子 A B ID FKID 1 3 2 3 3 4 4 4 我需要一个 select 语句 它显示 A 的所有内容 其中一个字段告诉我表 B 是否有任何与该 ID 匹配的 id Desired Result ID hasB 1
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • 对于返回超过1个值的SQL select,当Id为GUID时它们如何排序?

    我想知道 SQL Server 如何对查询返回的数据进行排序 并且各个表的 Id 列都是 uniqueidentifier 类型 我在创建所有 GUID 时使用 NHibernate GuidComb 并执行以下操作 Sheet sheet
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • Oracle 按月滚动或运行总计

    目标 每个月末所有报表的滚动 运行总计 Code select TRUNC ACTHX STMT HX STMT DATE MM AS MNTH COUNT ACTHX INVOICE as STMTS from ACTHX group b
  • RANK() OVER PARTITION 并重置 RANK

    如何获得在分区更改时重新启动的 RANK 我有这张表 ID Date Value 1 2015 01 01 1 2 2015 01 02 1
  • 如何使用第二行中的值填充第一行中的空值?

    我正在尝试编写一个查询 仅显示每个名称的第一行 但这些行的标题为空 因此我想从紧邻的下一行中提取它们的标题 table1 Name Title Row Dan NULL 1 Dan Engineer 2 Dan Developer 3 Ja
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于

随机推荐

  • RxJava doOnError 与 onError

    我尝试使用以下代码 initLocalSettingsIfNeed andThen initGlobalSettingsIfNeed configuration doOnComplete callback onSuccess doOnErr
  • Android应用程序图标随运行时变化

    在我的应用程序中 我想显示应用程序的不同图标 应根据场景进行更改 例如 它将标记任务完成的剩余天数 在 Android 菜单上 此图标将显示剩余天数 如果有人对此有任何想法 我将不胜感激 谢谢 实际上有很多方法可以实现这一目标 如果你最近注
  • 来自 SVN 存储库的 Maven 依赖项

    使用maven 2 有没有办法列出对另一个maven项目的依赖关系 该项目位于不同的SVN服务器上但不在maven存储库上 理想情况下 应该可以编译和运行主项目 而无需手动签出和构建依赖项 使用maven 2 有没有办法列出对另一个mave
  • 从存储过程批量复制

    我的数据库中有表 A B 和 C 我必须将A和B得到的结果放入表C中 目前 我有一个 SP 它将 A 和 B 的结果返回到 C 应用程序 该结果将使用 System Data SqlClient SqlBulkCopy 复制到表 C 中 优
  • 如何创建在 Visual Studio 中使用的新语言

    我想编写一种新的模板语言 并且希望 Visual Studio 支持 它 我需要知道的是 我如何解析我的新语言 给定我的新模板语言中的一些代码 如何将其转换为 HTML 现在我正在使用正则表达式逐个标记地解析它 但我认为随着语言变得更加复杂
  • 哈希表的查找时间总是 O(n) ?

    我不明白如果存储桶的数量恒定 那么哈希表如何进行恒定时间查找 假设我们有 100 个桶和 1 000 000 个元素 这显然是 O n 查找 这就是理解非常大的 n 值时事物的行为方式的复杂性所在 因此 哈希表永远不是常量查找 它始终是 O
  • 谷歌地图不显示

    我的 Google 地图无法显示 FF 和 Chrome 中的问题似乎是相同的 但 IE 中的问题更 糟糕 始终是最新版本 在 FF 和 Chrome 中我有一个问题position relative CSS 元素样式 一旦我切换到 使用开
  • TDD 时提取类。如何测试新提取的类?

    因此 我的主类中有几个方法使用矩阵来打开或关闭像素 我已经运行了所有当前的测试 所以我决定现在是时候提取一些与矩阵等相关的逻辑并创建一个 Matrix 类了 我的问题是 除了我目前对 SUT 类进行的测试 我才刚刚开始 所以我目前只有一个类
  • ffmpeg 复制以保留时间戳

    我正在尝试修改 HLS 段传输流 并使用 ffmpeg 保留其开始时间 但是 即使提到了 copyts 输出也不会保留输入文件的 start time 值 这是我的命令行 ffmpeg i fileSequence1 ts i x png
  • 如何将值与反斜杠进行比较?

    if message value 0 or message value 0 do stuff 我确信这是一个简单的语法错误 但是这个 if 语句有问题 当你只需要检查是否相等时 你也可以简单地使用in http docs python or
  • 从可观察数组中获取一个对象

    你如何编写一个需要一个函数Observable
  • vscode 括号对随 v1.67 改变颜色

    我正在尝试 Swagger for Go 但不知何故 在 Visual Studio Code 中它改变了颜色 在我安装 Swagger 之前 大括号和括号不是粉色 黄色或蓝色的 我已经尝试卸载 Swagger 和 Vscode 但这没有帮
  • 在 Node.js 中使用工作进程/后台进程与异步调用

    我想知道将数据库或其他异步调用传递给一个或多个工作进程是否有任何好处 具体来说 我正在使用 heroku 和 postgres 我已经阅读了有关 Node js 的大量内容 以及如何构建服务器 以便事件循环不会被阻塞 并且智能架构不会让传入
  • 无法从 App_code 文件夹中找到类型或命名空间

    我在项目的 App code 文件夹中编写了一个名为 ArchivedFilesWrapper 的类 但是当我在不同文件夹中的另一个文件中使用此类时 我收到错误 找不到类型或命名空间名称 ArchivedFilesWrapper 您是否缺少
  • AngularJS - “选择所有”当前可见的项目

    我目前正在尝试找出选择列表中当前可见的所有项目的最佳方法 目前 我的范围内有一个很大的项目列表 其中应用了分页 因此一次只能看到该列表中的几个项目 我有一个 全选 按钮 所需的行为是让它选择当前可见的所有项目 而不是列表中的所有项目 我想我
  • 编辑并继续功能在 Visual Studio 2010 中停止工作

    Visual Studio 编辑并继续功能在 Visual Studio 2010 上停止 我不知道是什么导致了该问题 我正在使用 C 开发 Windows 应用程序 该应用程序最初是在 Visual Studio 2008 中开发的 后来
  • 自动完成功能未检测到 eof()、bad()、good() 函数

    该代码块 include
  • 为什么这个简单的 C++ 代码会出现段错误? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 这里是a h header include
  • json-server 在发布请求后收到错误

    我正在使用 json server 并且收到以下错误 我做错了什么 类型错误 无法读取未定义的 0 的属性 id 函数 createId Users Picchu Documents url node modules json server
  • 创建两个表,其外键互相引用

    在 Oracle SQL SQL Developer 中 我尝试创建两个表 每个表都有一个引用另一个表的主键的外键 使用我的逻辑 我无法设置外键引用 因为另一个表尚不存在 以下是我如何构建它的总体思路 CREATE TABLE table1