SQL-更新和删除数据

2023-11-06

如何使用UPDATE和DELETE语句进一步操作表数据?


1. 更新数据

更新(修改)表中的数据,使用UPDATE语句。

  1. 更新表中的特定行;
  2. 更新表中的所有行;

注:不要省略WHERE子句。在使用UPDATE时一定要细心,因为稍微不注意,就会更新表中的所有行。

-- 客户1000000005现在有了电子邮件地址,因此他的记录需要更新 
UPDATE customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';

-- 更新多个列 
UPDATE customers
SET cust_contact = 'Sam Roberts',
    cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000005';

要删除某个列的值,可以设置它为NULL(假如表定义允许NULL值):

UPDATE customers
SET cust_email = NULL
WHERE cust_id = '1000000005';

其中,NULL用来去除cust_email列中的值。这与保存空字符串很不同(空字符串’ ‘表示,是一个值),而NULL表示没有值。

2. 删除数据

从一个表中删除(去掉)数据,使用DELETE语句。

  1. 从表中删除特定的行。
  2. 从表中删除所有行。

注:不要省略WHERE子句。因为稍不注意,就会错误地删除表中所有行。

-- 删除顾客1000000006
DELETE FROM customers
WHERE cust_id = '1000000006';

使用外键确保引用完整性的一个好处是,第一,DBMS使用它们实施引用完整性。例如要向Products表中插入一个新产品,DBMS不允许通过未知的供应商id插入它,因为vend_id列是作为外键连接到Vendors表的;第二,DBMS通常可以防止删除某个关系需要用到的行。例如,要从products表中删除一个产品,而这个产品用在orderitem的已有订单里,那么DELECT语句将抛出错误并终止。这是总要定义外键的理由。

DELECT不需要列名或通配符。DELECT删除整行而不是删除列。要删除指定列,请使用UPDATE语句。

DELECT语句从表中删除行,甚至是删除表中所有行。但是,DELECT不删除表本身。

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。

使用UPDATE或DELETE时所遵循的重要原则。

  1. 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
  2. 保证每个表都有主键。
  3. 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
  4. 有的DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句。如果所采用的DBMS支持这个特性,应该使用它。

如果SQL没有撤销(undo)按钮,应该非常小心地使用UPDATE和DELETE,否则你会发现自己更新或删除了错误地数据。

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

SQL-更新和删除数据 的相关文章

  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • 当从搜索表单动态构建 WHERE 子句时,如何防止 SQL 注入?

    我知道在 Java 中保护 SQL 查询免受 SQL 注入的唯一真正正确的方法是使用准备好的语句 然而 这样的语句要求基本结构 选择的属性 连接的表 WHERE条件的结构 不会改变 我这里有一个 JSP 应用程序 其中包含一个带有大约十几个
  • 在 postgres 中选择时保留顺序[重复]

    这个问题在这里已经有答案了 在 psql 中 至少在 v9 中 如果我这样做 select id from users where id in 2 1 1 and select id from users where id in 1 2 它
  • 如何在MySQL中选择字段具有最小值的数据?

    我想从 MySQL 中的表中选择特定字段具有最小值的数据 我尝试过 SELECT FROM pieces WHERE MIN price 请问有什么帮助吗 这将为您提供所有记录中价格最低的结果 SELECT FROM pieces WHER
  • 从多行中选择数据并对其进行排序[重复]

    这个问题在这里已经有答案了 id title content class 1 t1 p1 1 2 t2 p6 1 3 t3 p5 2 4 t4 p8 3 对于这个表 我如何使用 1 个查询来SELECT所有课程DISTINCTLY变成这个
  • SQL 层次结构 - 解析给定节点的所有祖先的完整路径

    我有一个由邻接列表描述的层次结构 不一定有单个根元素 但我确实有数据来识别层次结构中的叶 终端 项 所以 一个看起来像这样的层次结构 1 2 4 7 3 5 6 8 9 将通过表格来描述 就像这样 NOTE 我没有能力改变这种格式 id p
  • 通过 SQL 中的查询显示组中的非聚合列

    我在 SQL 2008 中有一个表 ID Items 1 A 1 B 2 C 3 D 3 B 我想得到的结果是 ID Items 1 A B 2 C 3 B D 我使用了游标 但它大大减慢了过程 我可以使用按查询分组或通过任何其他方式实现上
  • 从用户定义的函数调用 sql

    SQL Server 2008 是否可以从用户定义函数中的变量执行 sql 或者使用存储过程是唯一的解决方案 我有一条sql语句保存在variabele中 mySqlStatement select from someTable 我想从用户
  • db2:使用不同表上的选择更新多行和字段

    对于 A 的所有行 其中 A x B z 是否可以使用不同表 B c B d 的值 c 和 d 来增加表 A a 和 A b 的字段 a 和 b 我对这个查询感到疯狂 DB2 和 SQL 标准在 UPDATE 语句中没有 FROM 子句 所
  • 访问:根据记录中的最新日期进行分组(嵌套查询)

    下表中的此查询 SELECT ID Value As of FROM Table a INNER JOIN SELECT ID MAX As of AS As of FROM Table GROUP BY ID b ON a ID b ID
  • Codeigniter 如何清理输入?

    我正在构建一个 Codeigniter 应用程序 并且正在尽最大努力防止 SQL 注入 我正在使用 Active Record 方法来构建我的所有查询 我知道 Active Record 会自动清理输入 但我想知道到底清理到什么程度 它只是
  • Bigquery:如何声明数组变量并使用 select 语句设置数据?

    我试图在 BigQuery 上声明一个数组变量 但无法在变量中放入 SQL 语句 我找不到任何与此相关的主题 我想将表的所有列名放入变量中 所以我尝试了以下方法 DECLARE my array ARRAY
  • 从同一个表复制行并更新 ID 列

    我有下表 我已将产品 B 插入其中 它给我的 ID 为 15 然后我有定义表 如下所示 我想选择 ProdID 14 的 ProductDefinition 行并复制相同的行并将其插入到 ProdID 15 中 如下所示 如何使用 SQL
  • 替换 Select 语句中的 NULL 和空字符串

    我有一个专栏可以有NULL或空白区域 即 值 我想用有效值替换这两个值 例如 UNKNOWN 我发现的各种解决方案建议修改表本身内的值 然而 在这种情况下 这不是一个选项 因为数据库用于开发和 或修补得非常差的第三方应用程序 实际上 我认为
  • 如何解决postgresql中group by和聚合函数的问题

    我正在尝试编写一个查询来划分两个 SQL 语句 但它显示了我 ERROR column temp missed must appear in the GROUP BY clause or be used in an aggregate fu
  • 如何查询最近7天的总计?

    我正在使用 SQL Server 2008 我想编写一个查询来提供给定天数的总活动量 具体来说 我想统计过去 7 天每天的总票数 我的桌子看起来像这样 VoteID VoteDate Vote BikeID 1 2012 01 01 08
  • 在 Postgres 中以周为单位分割间隔

    这是另一个关于日期的 SQL 问题 我正在使用 PHP 和 Postgres 构建一个日历应用程序 它将显示几天 几周甚至几个月的事件 每个事件都有开始日期和结束日期 按范围选择它们不是问题 然而 如果 Postgres 可以在每周的第一天
  • 将行连接成 CLOB

    关于这个主题有很多类似的问题 但我找不到任何解决方案来考虑最终结果对于 varchar2 来说太大的任何问题 所以我想做的就是改变这一点 Column1 Column2 1 Hello 1 world 1 please help 2 Tha
  • 修改SQL Server中的默认值

    我正在尝试使用 SQL Server 2008 中的 SQL 语句更改列的默认值 我在很多地方找到了如何在创建表 添加列时设置默认值 但没有找到如何设置它 一旦列已经存在就修改它 这就是我可以用来在添加时设置它的内容 ALTER TABLE
  • 数据库函数 VS Case 语句

    昨天我们遇到了一个场景 必须获取 a 的类型db field在此基础上我们必须编写该字段的描述 喜欢 Select Case DB Type When I Then Intermediate When P Then Pending Else

随机推荐

  • 编写一个使用指针的C函数,交换数组a和数组b的对应元素

    编写一个使用指针的C函数 交换数组a和数组b的对应元素 int a 5 1 2 3 4 5 int b 5 10 20 30 40 50 输出格式要求 a d 2d b d 2d 程序运行示例如下 a 0 10 a 1 20 a 2 30
  • QT应用部署流程

    参考链接 https www shuzhiduo com A LPdo07AGz3 1 Windows系统 Windows下使用QT自带工具windeployqt exe部署 windows gt command 切换到QT的工具目录 在c
  • signature=a195252fc5196d0fb82cccccc68b06b3,Gene signatures in wound tissue as evidenced by molecular...

    Wound induction in the chicken CAM Chick embryos were cultured for 10 days and CAMs were inflicted by parallel scalpel s
  • linux 数组里面是json,将JSON解析为shell脚本中的数组

    小编典典 如果您确实无法使用适当的JSON解析器 例如 1 请尝试 基于的解决方案 jq awk Bash 4 x readarray t values lt 3 print 4 myfile json Bash 3 x IFS n rea
  • lua 3.0 中 普通方法延时

    local delayTime cc DelayTime create 1 local callFunND cc CallFunc create function self pushjoystick end local seq cc Seq
  • 微信企业付款至零钱,状态处理中,status=PROCESSING的解决办法

    前段时间腾讯因为支付系统异常 更新了一些东西 然后就开始出现了这个问题 时不时的就会有一个两个状态为 处理中 的交易 但文档中并没有给出解决办法 尝试咨询了客服 给出了两个解决方案 1 把该笔交易当做失败处理 但以后这笔订单就不要再去折腾它
  • ESP8266 RTOS SDK 移植 u8g2 移植代码

    LED屏驱动ssd1306 屏幕128x64大小 1 移植代码核心 方法1 port c define SCL Pin GPIO SCL define SDA Pin GPIO SDA void delay us uint32 t time
  • Flink学习20:算子介绍reduce

    1 reduce简介 按照指定的方式 把每个元素进行累计执行 比如实现累加计算 示例 import keyByNameTest StockPrice import org apache flink api scala createTypeI
  • C++ 类学习总结(三) 类的拷贝赋值操作

    拷贝赋值操作 基本概念 拷贝构造函数 是一种构造函数 用同类型的对象初始化本对象的操作 即将新对象初始化为同类型另一个对象的副本 拷贝赋值运算符 接收一个本类型对象的赋值运算符版本 返回本对象的引用 类的默认函数 默认合成函数 当我们定义了
  • STM32F103 实验 PWM输出

    目录 本文 在上一章的基础上 将介绍如下内容 PWM输出实验 上一篇 STM32F103实验定时器 https blog csdn net qq 40318498 article details 96436994 正文 实验目的 使用TIM
  • Bridge:桥接模式

    将抽象部分与它的实现分离 使他们都可以独立地变化 抽象与实现的分离方法 是借助耦合 对于一个派生类而言 其从基类继承了抽象函数 并对抽象函数进行实现 这是常规的抽象与实现耦合的情况 而 若将函数实现的功能代码抽出 放到一个特定的实现类里 并
  • 设计模式(适配器模式)

    这里写目录标题 一 应用 1 1 概念 1 2 应用场景 二 实现 2 1 Python实现 2 2 Java实现 2 3 Golang实现 一 应用 1 1 概念 适配器是一种结构化的设计模式 主要是为了让不兼容的对象能够相互兼容 1 2
  • shell脚本——循环语句、sed、函数、数组、免交互expect

    目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免
  • 记录 BL-604 环境配置

    与两个朋友组队参加个比赛 第一次正经的参加比赛 弥补之前一些遗憾吧 随便记录一下 下载博流的开发包 https gitee com bouffalolab bl mcu sdk 注册平头哥 https occ t head cn auth
  • NandFlash介绍、操作流程分析以及S5PV210的NandFlash控制器介绍

    1 NandFlash的型号与命名 注 本文以S5PV210芯片和K9F2G08芯片做分析 1 Nand的型号命名都有含义 拿K9F2G08来示例分析一下 K9F表示是三星公司的NandFlash系列 2G表示Nand的大小是2Gbit 2
  • Tomcat 各安装包选择及使用情景。

    本文参考 Apache Tomcat 8 5 51 官方 README 文件 当我们进入 Tomcat 主页下载 Tomcat 时 会看到各种安装包的选择 Binary Distributions 二进制发行包 Core zip pgp s
  • QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

    QT C 多线程时 工作界面的样式频繁改变导致程序奔溃的问题 一 错误现象与原因 最近在学习QT 遇到了一点问题 是关于工作线程与UI线程的 其主要问题为 我的工作线程是一个死循环 当我点击按钮进入工作线程 我的工作线程用emit发送一个信
  • IDEA使用JUnit时@Test无效以及无法导入org.junit包的一系列问题

    先找到idea的安装位置 进入lib文件夹 然后打开idea File gt Project Structure 选择Project Settings中的Libraries 点击如图 号 然后添加以下两个包 点击OK 添加成功就可以了 ht
  • 3.java 基础if语句测评题-答案

    知识点 java 基础if语句测评题 答案 题目1 训练 李雷想买一个价值7988元的新手机 她的旧手机在二手市场能卖1500元 而手机专卖店推出以旧换新的优惠 把她的旧手机交给店家 新手机就能够打8折优惠 为了更省钱 李雷要不要以旧换新
  • SQL-更新和删除数据

    如何使用UPDATE和DELETE语句进一步操作表数据 1 更新数据 更新 修改 表中的数据 使用UPDATE语句 更新表中的特定行 更新表中的所有行 注 不要省略WHERE子句 在使用UPDATE时一定要细心 因为稍微不注意 就会更新表中