如何在不删除约束的情况下从表中删除

2024-01-11

我有一个问题,我需要在不删除或暂停约束的情况下删除信息。问题是否允许放弃约束很简单。但是我可以将值从 NULL 更改为 NOT NULL。

DELETE FROM SUPPLIER
WHERE COUNTRY = 'USA';

然而,另一个表 PRODUCT 是 SUPPLIER 中 SUPPLIER_NAME 列的外键。我不被允许放弃这个约束。

我尝试将外键设置为空,但它不起作用。

编辑我不允许限制或暂停约束

这是完整的问题

“从数据库中删除有关位于美国的所有供应商的信息。有关位于美国的供应商提供的所有产品的信息必须保留在数据库中。您不得删除和/或暂停任何引用完整性约束,并且必须修改一项NULL/NOT NULL 一致性约束。”

正在使用的表

CREATE TABLE PRODUCT
(
    PRODUCT_NAME    VARCHAR(40)     NOT NULL,
    SUPPLIER_NAME   VARCHAR(40)     NOT NULL,
    CATEGORY_NAME   VARCHAR(30) NOT NULL,
    QUANTITY_PER_UNIT   VARCHAR(20),
    UNIT_PRICE      DECIMAL(10,2)   NOT NULL    DEFAULT 0,
    UNITS_IN_STOCK  DECIMAL(9)  NOT NULL    DEFAULT 0,
    UNITS_ON_ORDER  DECIMAL(9)  NOT NULL    DEFAULT 0, 
    REORDER_LEVEL   DECIMAL(9)  NOT NULL    DEFAULT 0,
    DISCONTINUED    CHAR(1)     NOT NULL    DEFAULT 'N',
    CONSTRAINT PK_PRODUCT PRIMARY KEY (PRODUCT_NAME),
    CONSTRAINT FK_CATEGORY_NAME FOREIGN KEY (CATEGORY_NAME) REFERENCES CATEGORY(CATEGORY_NAME),
    CONSTRAINT FK_SUPPLIER_NAME FOREIGN KEY (SUPPLIER_NAME) REFERENCES SUPPLIER(COMPANY_NAME),
    CONSTRAINT CK_PRODUCT_UNIT_PRICE CHECK (UNIT_PRICE >= 0),
    CONSTRAINT CK_PRODUCT_UNITS_IN_STOCK CHECK (UNITS_IN_STOCK >= 0),
    CONSTRAINT CK_PRODUCT_UNITS_ON_ORDER CHECK (UNITS_ON_ORDER >= 0),
    CONSTRAINT CK_PRODUCT_REORDER_LEVEL CHECK (REORDER_LEVEL >= 0),
    CONSTRAINT CK_PRODUCT_DISCONTINUED CHECK (DISCONTINUED in ('Y','N'))
);

CREATE TABLE SUPPLIER
(
    COMPANY_NAME    VARCHAR(40) NOT NULL,
    CONTACT_NAME    VARCHAR(30),
    CONTACT_TITLE   VARCHAR(30),
    ADDRESS         VARCHAR(60),
    CITY        VARCHAR(15),
    REGION      VARCHAR(15),
    POSTAL_CODE     VARCHAR(10),
    COUNTRY         VARCHAR(15),
    PHONE       VARCHAR(24),
    FAX         VARCHAR(24),
    HOME_PAGE       VARCHAR(500),
    CONSTRAINT PK_SUPPLIER PRIMARY KEY (COMPANY_NAME)  
);

由于 PRODUCT 表的外键没有指定ON DELETE操作,它将具有默认行为,即RESTRICT。由于您无法将此约束更新为SET NULL,您可能必须自己将它们设置为 NULL。

首先,更改表,以便 SUPPLIER_NAME 外键可以接受 NULL 值。

然后,更新供应商在美国的产品,将其 SUPPLIER_NAME 设置为 NULL。像这样的东西:

update PRODUCT set SUPPLIER_NAME = NULL where SUPPLIER_NAME IN (
select SUPPLIER_NAME from SUPPLIER where COUNTRY = 'USA');

最后,您可以删除 COUNTRY = 'USA' 的供应商。

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

如何在不删除约束的情况下从表中删除 的相关文章

  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • MySql 视图脚本中的注释

    可以这样做吗 我尝试过多个 gui mysql workbench navicat toad for mysql 但没有一个保存这样的注释 something important select something else importan
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • MySQL中查找id最大的行

    看一下下面名为 Articles 的 MySQL 表 id articleId version title content 1 1 0 0 ArticleNo 1 title v0 0 ArticleNo 1 content v0 0 2
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • 在 MySQL 中进行全文搜索的最有效方法

    我有 3 个表 我想查询搜索词文本框 我的查询目前看起来像这样 SELECT Artist FROM Artist Band Instrument WHERE MATCH Artist name AGAINST mysearchterm O
  • 在 php 和 mysql 中使用 utf8mb4

    我读过 mysql gt 5 5 3 完全支持每个可能的字符 如果您使用编码utf8mb4对于某个表 列http mathiasbynens be notes mysql utf8mb4 http mathiasbynens be note
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • MySQL小写自动转换

    我有多个在数据库表中写入数据的 Web 服务 我想针对特定字段自动将大写字符串转换为小写字符串 mysql 有没有执行此任务的函数 假设这是表 id name language 有时 在语言字段内 Web 服务会写入大写字符串 IT 我想直
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • ODBC 链接表中突然开始出现写入冲突消息

    我有一个 mySQL 数据库 用于跟踪我们的项目并驱动我们的网站显示其信息 为了方便更新数据库 我设置了一个使用 ODBC 连接 MySQL ODBC 5 1 来编辑数据的访问数据库 过去几个月一直运行良好 没有出现任何问题 然而 昨晚用户
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • Innodb页面大小设置

    在innodb中 页面大小默认为16kb 如何将页面大小设置为 8kb 是否有在源编译步骤中设置的选项 您不需要在源编译步骤中指定页面大小 MySQL 5 6 及更高版本支持不同的页面大小 无需重新编译 但是 您必须在初始化 InnoDB
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car

随机推荐

  • lucene:如何执行增量索引并避免“删除和重做”

    我有一个文件夹 MY FILES 其中包含大约 500 个文件 每天都会有一个新文件到达并放置在那里 每个文件的大小约为 4Mb 我刚刚开发了一个简单的 void main 来测试是否可以在这些文件中搜索特定的通配符 它工作得很好 问题是我
  • Win7:无需重启即可更换驱动程序

    我正在 Windows 7 下调试音频驱动程序 当我需要用更新版本替换它时 我必须重新启动系统 因为尽管驱动程序已卸载 但 DriverStore 下的当前驱动程序副本仍被锁定 有没有办法避免重启 XP 上是可以的 你尝试过阻止司机吗dev
  • 通过 Lotus Notes 使用 java Apache Commons Mail 发送电子邮件

    我在使用 java 程序中的 Lotus Notes 发送电子邮件时遇到了电子邮件配置问题 我知道这非常简单 但我想我错过了一些东西 我的代码如下 import java util logging Level import java uti
  • 对参数包中的每个元素应用函数

    我有以下专门化的模板函数 Pass the argument through template
  • 输入新功能时 rsp 不会移动[重复]

    这个问题在这里已经有答案了 当进入 C 函数时 我希望在反汇编中看到堆栈指针如何被减去足以为变量腾出空间 但没有 我只看到当esp仍然指向ebp时如何通过ebp直接访问变量的地址 push rbp mov rsp rbp movl 0x4
  • 如何使用 Nuget 控制台获取 jQuery 版本列表?

    我正在尝试找出解决方法来解决我遇到的问题 jQuery 2 0 是 Nuget 希望通过 GUI 更新到的版本 我可以将 Nuget 保留在 jQuery 1 9 x 1 x 路径上 而不是升级到 2 x 吗 https stackover
  • 如何在Unity3d软键盘中检测“完成”按钮

    I use a InputField in my android app to get a string a soft keyboard pops up when i m entering a string but now i want t
  • R Shiny:如何更改表格的背景颜色

    我找到了如何更改 Shiny 中用户界面的背景颜色 我发现的提款是它还为我显示的表格的背景着色tableOutput 这里我展示了一个虚拟示例 ui R 闪亮的UI 页面带侧边栏 headerPanel 虚拟 侧边栏面板 标签 hr 主面板
  • undefined 不是一个对象(评估 'RNGestureHandlerModule.State'

    我已经安装了反应导航 in my 反应本机项目 它是一个入门项目 没有任何代码 但是在运行项目时我遇到了这样的错误 这是我的导航代码 import createStackNavigator from react navigation imp
  • 在 C/C++ 中以 O(1) 时间初始化动态数组

    有没有办法在 O 1 时间内初始化整个动态数组 有没有类似的东西bool a 10 false 在静态数组的情况下 对于动态数组 要设置的每个元素都必须由CPU单独考虑 因此时间复杂度为O N 或者是吗 但这并不是 big oh 真正的工作
  • 尝试通过玩家输入使用 tkinter 使对象在网格中移动

    所以我正在 tkinter 而不是 pygame 中开发一个类似地下城爬行者的游戏 我发现这非常困难 因为网格无法在代码中工作 并且我找不到在画布上创建可通过按键输入移动的形状的方法 我已经尝试了多种修复方法 但无法找到一种方法将所有这些都
  • 与“docker run -d”等效的远程 api 命令是什么?

    我正在尝试通过远程 api 调用 docker 命令 Docker 远程 api 似乎没有 分离模式 选项 http docs docker io en latest commandline command run http docs do
  • LinQ 查询多个表并提取数据

    我正在对 4 个表进行内连接查询 我必须提取数据并转换为字符串并将其放入数组中 var query from a in context as join b in context bs on a prikey equals b forkey
  • 如何连接数组列表中的字符串值

    我需要使用 concat 一次打印所有数组列表值 这是我的代码 ArrayList
  • git merge 不创建合并提交,没有 MERGE_HEAD [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 在 Linux 上使用 Git 1 8 1 2 我一直在基于以下两个不同的分支上工作master并行 称为 A 和 B 并且还创建
  • 是什么导致 pyspark 中的“unicode”对象没有属性“toordinal”?

    我收到此错误 但我不知道是什么原因造成的 我的 python 代码在 pyspark 中运行 堆栈跟踪很长 我只显示其中的一些 所有堆栈跟踪都没有显示我的代码 所以我不知道在哪里寻找 导致此错误的可能原因是什么 usr hdp 2 4 2
  • 什么是 GWT 字节缓存文件?

    作为背景 今天我的 GWT 托管模式运行速度神秘地减慢到几乎无法工作的程度 每当我暂停应用程序时 相关线程 主线程 代码服务器等 都会等待某些文件 I O 本机方法 挠头一阵子后 我尝试清理一下我的硬盘 然后我刚刚在我的用户中发现Temp文
  • 在 Mac OS 上安装 Rails 失败并出现多个错误

    我尝试在 Mac OS v10 10 4 系统上安装 Rails 但运行时失败brew install rbenv ruby build 错误是 Error Permission denied usr local etc openssl W
  • PRNG 需要线程安全吗?

    只要并发调用不会导致 seg v 或返回相同的值 就有什么理由可以防止竞争条件和数据损坏PRNGs http en wikipedia org wiki Pseudorandom number generator当这些错误的主要影响是不可预
  • 如何在不删除约束的情况下从表中删除

    我有一个问题 我需要在不删除或暂停约束的情况下删除信息 问题是否允许放弃约束很简单 但是我可以将值从 NULL 更改为 NOT NULL DELETE FROM SUPPLIER WHERE COUNTRY USA 然而 另一个表 PROD