当前位置: 首页 > news >正文

【SQL 必知必会】- 第十六课 更新和删除数据

目录

更新数据

        不要省略WHERE 子句

        在UPDATE 语句中使用子查询

删除数据

        不要省略WHERE 子句

        友好的外键

        删除表的内容而不是表

        更快的删除

更新和删除的指导原则


        这一课介绍如何利用UPDATE 和DELETE 语句进一步操作表数据。

更新数据

        更新(修改)表中的数据,可以使用UPDATE 语句。有两种使用UPDATE的方式:

  • 更新表中的特定行;
  • 更新表中的所有行。

        不要省略WHERE 子句

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

        使用UPDATE 语句非常容易,甚至可以说太容易了。基本的UPDATE 语句由三部分组成,分别是:

  • 要更新的表;
  • 列名和它们的新值;
  • 确定要更新哪些行的过滤条件。
UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '1000000005';

        UPDATE 语句以WHERE 子句结束,它告诉DBMS 更新哪一行。没有WHERE子句,DBMS 将会更新表中的所有行,这不是我们希望的。

        更新多个列的语法稍有不同:

UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';

        在更新多个列时,只需要使用一条SET 命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。


        在UPDATE 语句中使用子查询

        UPDATE 语句中可以使用子查询,使得能用SELECT 语句检索出的数据更新列数据。关于子查询及使用的更多内容,请参阅第11 课。

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

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

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


删除数据

        从一个表中删除(去掉)数据,使用DELETE 语句。有两种使用DELETE的方式:

  • 从表中删除特定的行;
  • 从表中删除所有行。

        不要省略WHERE 子句

        在使用DELETE 时一定要细心。因为稍不注意,就会错误地删除表中所有行。在使用这条语句前,请完整地阅读本节。

        前面说过,UPDATE 非常容易使用,而DELETE 更容易使用。
        下面的语句从Customers 表中删除一行:

DELETE FROM Customers
WHERE cust_id = '1000000006';

        这条语句很容易理解。DELETE FROM 要求指定从中删除数据的表名,WHERE 子句过滤要删除的行。在这个例子中,只删除顾客1000000006。如果省略WHERE 子句,它将删除表中每个顾客。


        友好的外键

        第12 课介绍了联结,简单联结两个表只需要这两个表中的常用字段。也可以让DBMS 通过使用外键来严格实施关系。存在外键时,DBMS 使用它们实施引用完整性。例如,要从Products 表中删除一个产品,而这个产品用在OrderItems 的已有订单中,那么DELETE 语句将抛出错误并中止。这是总要定义外键的另一个理由。

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


        删除表的内容而不是表

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

        更快的删除

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


更新和删除的指导原则

        下面是许多SQL 程序员使用UPDATE 或DELETE 时所遵循的重要原则。

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE 子句的UPDATE 或DELETE 语句。
  • 保证每个表都有主键(如果忘记这个内容,请参阅第12 课),尽可能像WHERE 子句那样使用它(可以指定各主键、多个值或值的范围)。
  • 在UPDATE 或DELETE 语句使用WHERE 子句前,应该先用SELECT 进行测试,保证它过滤的是正确的记录,以防编写的WHERE 子句不正确。
  • 使用强制实施引用完整性的数据库(关于这个内容,请参阅第12 课),这样DBMS 将不允许删除其数据与其他表相关联的行。
  • 有的DBMS 允许数据库管理员施加约束,防止执行不带WHERE 子句的UPDATE 或DELETE 语句。如果所采用的DBMS 支持这个特性,应该使用它。

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

http://www.lryc.cn/news/59537.html

相关文章:

  • 常见哈希算法及其应用
  • PHP快速入门02-PHP语言基础
  • FSCapture - 长截图工具
  • [ 云计算 | Azure ] Chapter 05 | 核心体系结构之管理组、订阅、资源和资源组以及层次关系
  • 【算法LearnNO.1】算法介绍以及算法的时间复杂度和空间复杂度
  • 013:Mapbox GL添加marker
  • 智慧工厂可视化合集,推动行业数字化转型
  • 工作流调度系统 Azkaban介绍与安装(一)
  • 【Python基础入门学习】Python工具Pycharm的安装与使用
  • 【版本控制】Github同步Gitee镜像仓库自动化脚本
  • 索引的分类
  • 【整理九】
  • 钢网是SMT生产使用的一种工具,如何制作?
  • 如何创建自己的gym环境
  • 使用Marshaller 将Java对象转化为XML格式和字符串转为xml
  • NumPy 秘籍中文第二版:八、质量保证
  • [ 应急响应篇基础 ] 日志分析工具Log Parser配合login工具使用详解(附安装教程)
  • 什么是MVVM?
  • Java 企业电子招投标采购系统源码:采购过程更规范,更透明
  • 1384:珍珠(bead)
  • 34岁本科男,做了5年功能测试想转行,除了进厂还能干什么?
  • 一文理解Transformer整套流程
  • 04、SpringBoot运维实用篇
  • 3.Java运算符
  • 《RockectMQ实战与原理解析》Chapter4-分布式消息队列的协调者
  • Spring Boot 最适配的 UI 是什么
  • TensorFlow 1.x 深度学习秘籍:6~10
  • 分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
  • RK3399平台开发系列讲解(基础篇)POSIX 定时器
  • web小游戏开发:扫雷(三)(完成度90%)