SQL ON DELETE CASCADE,删除以哪种方式发生?

2024-01-11

如果我在数据库中有两个关系,如下所示:

CREATE TABLE Courses (
  CourseID int NOT NULL PRIMARY KEY,
  Course VARCHAR(63) NOT NULL UNIQUE,
  Code CHAR(4) NOT NULL UNIQUE
);

CREATE TABLE BookCourses (
  EntryID int NOT NULL PRIMARY KEY,
  BookID int NOT NULL,
  Course CHAR(4) NOT NULL,
  CourseNum CHAR(3) NOT NULL,
  CourseSec CHAR(1) NOT NULL
);

我在两者之间建立了外键关系,如下所示:

ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;

然后你可以看到Course属性中的BookCourses关系引用Code属性中的Courses关系。

我的问题是,当两个关系中的任何一个发生删除时,删除会以哪种方式级联?如果我删除一个元组Courses关系,它会删除所有引用元组吗?BookCourses关系,还是相反?


当您删除表上的某些内容时,级联将起作用Courses。表上的任何记录BookCourses引用了表Courses将被自动删除。

但是当你尝试删除表时BookCourses仅表本身受到影响,而不影响表本身Courses

后续问题:你为什么有CourseID在表类别上?

也许你应该将你的架构重组为这样,

CREATE TABLE Categories 
(
  Code CHAR(4) NOT NULL PRIMARY KEY,
  CategoryName VARCHAR(63) NOT NULL UNIQUE
);

CREATE TABLE Courses 
(
  CourseID INT NOT NULL PRIMARY KEY,
  BookID INT NOT NULL,
  CatCode CHAR(4) NOT NULL,
  CourseNum CHAR(3) NOT NULL,
  CourseSec CHAR(1) NOT NULL,
);

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

SQL ON DELETE CASCADE,删除以哪种方式发生? 的相关文章

  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有
  • fetchsize和batchsize对Spark的影响

    我想通过以下方式控制 RDB 的读写速度Spark直接 但标题已经透露的相关参数似乎不起作用 我可以得出这样的结论吗fetchsize and batchsize我的测试方法不起作用 或者它们确实会影响阅读和写作方面 因为测量结果基于规模是
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 内连接不重复,可以吗?

    鉴于这两个表 表 A1 有两行具有相同的值 a A1 a a 表 A2 有两行主键值为 A B 它们与 a 关联 A2 PK col2 A a B a 我想要的是 A1 和 A2 的连接并得到这个结果 a A a B 显然内连接在这里不起作
  • 为表中的每个组选择前 N 行

    我面临一个非常常见的问题 即 为表中的每个组选择前 N 行 考虑一个表id name hair colour score列 我想要一个结果集 对于每种头发颜色 都能得到前 3 名得分手的名字 为了解决这个问题 我得到了我所需要的Rick O
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 如何使用sql作为xml路径('')但保留回车符

    我有下面的代码 select select cast Narrative as Varchar max char 13 from officeclientledger where ptmatter matter and ptTrans 4
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 在 ie 8 中打印浮点图

    我目前正在使用http www flotcharts org http www flotcharts org 对于一个绘图插件 我正在尝试实现从内容包围的页面上打印流程图的能力 我正在尝试打开一个新窗口并打印一个画布对象 这样我就可以只打印
  • 更改方法重写中的参数修饰符

    我知道一个params修饰符 将数组类型的一个参数转换为所谓的 参数数组 特别不是方法签名的一部分 现在考虑这个例子 class Giraffid public virtual void Eat int leaves Console Wri
  • 如何让 Django-Ajax-Selects 在 Django Admin 中工作?

    Django Ajax 选择 http code google com p django ajax selects 这是我所做的 但无济于事 Added ajax select to my INSTALLED APPS in setting
  • 6 个位置内 3 个元素的排列

    我正在寻找排列 或组合 c a b c 在始终具有具有替代元素的序列的条件下的六个位置内 例如abcbab 排列可以很容易地得到 abc lt c a b c permutations n 3 r 6 v abc repeats allow
  • 为什么使用分号时 JavaScript 不被解释为代码块?

    In Chrome版本 72如果我运行以下命令JavaScript没有错误 prop p prop prop gt gt prop prop 因此 这行代码意外地被解释为表达式语句 但是 如果我在末尾运行相同的代码并带有分号 它将按预期运行
  • 为什么我们不能检查react-native应用程序的样式属性?

    我想检查元素的颜色是否为白色 如下所示 if styles background white console log ok console log styles background white gt was false 1 为什么 1 返
  • DBMS_STANDARD 包的过程和/或函数是否应该在 PL/SQL 代码中使用?

    最近 我遇到了一个BEFORE INSERT OR UPDATE在桌子上触发 在这个触发器中 作者依赖于INSERTING and UPDATING函数 都返回一个BOOLEAN 的DBMS STANDARD包来确定触发器是在插入之前还是更
  • Typekit 脚本缓慢/无响应/卡住

    我在我的网站上安装了 typekit 通常在开头的 head 标签后面有两行 js 但加载字体非常慢 无响应 这可以通过刷新页面来完全解决 之后 typekit 字体完美地加载迅速地 但从用户的角度来看 他们永远不会知道要这样做 因此他们将
  • Django South - 表已经存在

    我正在尝试从南方开始 我有一个现有的数据库 我添加了南 syncdb schemamigration initial 然后 我更新了models py添加一个字段并运行 manage py schemamigration myapp aut
  • 结构指令、位置工具提示

    我创建了一个结构指令 当我将鼠标悬停在文本 see tooltip 上时 该指令会根据 ng template 内的内容显示工具提示 工具提示显示正确 但它显示在屏幕的 top 0px left 0px 位置 我希望它显示在文本 see t
  • 带有标题栏和 Windows 任务栏的 Tkinter 窗口

    我已经广泛搜索这个问题 但似乎没有人知道 我在 python 2 7 中创建了一个简单的 tkinter 窗口 tcl 8 5 并希望它最大化 就像我点击右上角的最大化按钮一样 使用 fullscreenoption 不是一个选项 因为它删
  • Eclipse、Java:如何导入 zip 格式的库?

    好吧 这是基本的 但似乎正常的方法对我来说不起作用 我正在尝试导入 jSSC 库 用于与串行端口等进行通信 最新的库是 jSSC 0 9 0 Release 所以 我尝试了以下方法 将 zip 文件放置在工作区中 并将其添加为项目属性 gt
  • 从 Python 子进程执行 shell 脚本

    我需要从 python 调用 shell 脚本 问题是 shell 脚本在完成之前会问几个问题 我找不到使用的方法subprocess 使用pexpect似乎有点过头了 因为我只需要启动它并向它发送几个 是 请不要建议需要修改 shell
  • eclipse 外部工具配置 -> 类路径中引用的库不存在:org.eclipse.swt

    更新到最新的 eclipse mars 版本后 版本 Mars 候选版本 1 4 5 0RC1 内部版本号 20150521 1252 我无法启动任何 Ant 脚本 它总是会导致以下错误 首先我检查路径是否真的正确 并确保特定的jarorg
  • 将轮廓路径转换为 ​​svg 路径

    我正在使用 openCV 和 python 从图像中提取轮廓 现在我需要将这些轮廓路径 列表 导出为 svg 路径 我怎样才能做到这一点 code ret thresh cv2 threshold imgray 27 25 0 contou
  • 如何生成“随机”但又“唯一”的数字?

    随机数是如何生成的 java等语言如何生成随机数 特别是GUID是如何生成的 我发现像伪随机数生成器这样的算法使用初始值 但我需要创建一个随机数程序 其中一旦出现的数字就永远不会重复 即使系统重新启动等也是如此 我认为我需要将这些值存储在任
  • 从 firebase 数据库检索数据到 textview 时如何创建换行符?

    我知道如果我想创建一个新行 我必须插入 n无论我需要在哪里创建该线 但我得到的是没有我在 firebase 数据库中已有的行的文本 有人可以告诉我如何解决这个问题吗 例如 如果我在数据库中有 hello n world 我明白了hello
  • jqGrid 自定义编辑对话框

    我正在开发一个使用 jqGrid 的应用程序 问题是在行编辑时出现的编辑对话框必须具有特定的布局 所以我更愿意通过ajax加载它 然后手动将数据发送回jqGrid 我在论坛上搜索了很多 但找不到如何执行此操作的示例 因此 我只需要 jqGr
  • 如何确定应用程序包中是否存在文件?

    抱歉 今天的第二个问题很愚蠢 是否可以确定应用程序包中是否包含文件 我可以毫无问题地访问文件 即 NSString pathAndFileName NSBundle mainBundle pathForResource fileName o
  • SQL ON DELETE CASCADE,删除以哪种方式发生?

    如果我在数据库中有两个关系 如下所示 CREATE TABLE Courses CourseID int NOT NULL PRIMARY KEY Course VARCHAR 63 NOT NULL UNIQUE Code CHAR 4