16.1 更新数据

使用UPDATE语句更新或修改表中的数据。必须有足够的安全权限。

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

使用UPDATE时一定要细心,不要省略WHERE子句。

SET命令用来将新值赋给被更新的列。

基本的UPDATE语句由三部分组成:

  • 要更新的表
  • 列名和他们的新值
  • 确定要更新那些行的过滤条件
MariaDB [sqlbzbh]> SELECT * FROM Customers;
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI | 44444 | USA | John Smith | sales@villagetoys.com |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH | 43333 | USA | Michelle Green | NULL |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN | 42222 | USA | Jim Jones | jjones@fun4all.com |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ | 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL | 54545 | USA | Kim Howard | NULL |
| 1000000006 | Toy Land | 123 Any Street | New York | NY | 11111 | USA | NULL | NULL |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
6 rows in set (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> UPDATE Customers SET cust_email = 'kim@thetoystore.com' WHERE cust_id = '1000000005';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT cust_email FROM Customers WHERE cust_id = '1000000005';
+---------------------+
| cust_email |
+---------------------+
| kim@thetoystore.com |
+---------------------+
1 row in set (0.00 sec) MariaDB [sqlbzbh]>

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

MariaDB [sqlbzbh]> UPDATE Customers SET cust_contact = 'Sam Roberts', cust_email = 'sam@toyland.com' WHERE cust_id = '1000000006';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT cust_contact, cust_email FROM Customers WHERE cust_id = '1000000006';
+--------------+-----------------+
| cust_contact | cust_email |
+--------------+-----------------+
| Sam Roberts | sam@toyland.com |
+--------------+-----------------+
1 row in set (0.00 sec) MariaDB [sqlbzbh]>

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

注意:空字符串用''表示,是一个值,而NULL表示没有值。

MariaDB [sqlbzbh]> UPDATE Customers SET cust_email = NULL WHERE cust_id = '1000000005';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT cust_email FROM Customers WHERE cust_id = '1000000005';
+------------+
| cust_email |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec) MariaDB [sqlbzbh]>

16.2 删除数据

使用DELETE语句从一个表中删除(去掉)数据。必须有足够的安全权限。

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

DELETE不需要列名或通配符,因为DELETE删除的是整行而不是删除列。

DELETE删除的是表的内容而不是表,DELETE不删除表本身。

使用DELETE时一定要细心,不要省略WHERE子句。

MariaDB [sqlbzbh]> DELETE FROM Customers WHERE cust_id = '1000000006';
Query OK, 1 row affected (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT * FROM Customers WHERE cust_id = '1000000006';
Empty set (0.00 sec) MariaDB [sqlbzbh]>

如果要删除表中所有行,可使用TRUNCATE TABLE语句,速度更快。

MariaDB [sqlbzbh]> SELECT * FROM CustNew;
+------------+-----------+----------------+-----------+------------+----------+--------------+--------------+------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+-----------+----------------+-----------+------------+----------+--------------+--------------+------------+
| 1000000006 | Toy Land | 123 Any Street | New York | NY | 11111 | USA | NULL | NULL |
+------------+-----------+----------------+-----------+------------+----------+--------------+--------------+------------+
1 row in set (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> TRUNCATE TABLE CustNew;
Query OK, 0 rows affected (0.01 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT * FROM CustNew;
Empty set (0.00 sec) MariaDB [sqlbzbh]>

16.3 更新和删除的指导原则

  • 无论怎样,小心使用UPDATE或DELETE语句。
  • 慎重使用不带WHERE的UPDATE或DELETE语句。
  • 保证每个表都有主键。
  • 更新或删除之前,先用SELECT语句进行测试,确保改动准确。
  • 强制实施引用完整性的数据库不允许删除其数据与其他表相关联的行。

读书笔记--SQL必知必会16--更新和删除数据的更多相关文章

  1. SQL必知必会笔记2

    15. 插入数据 1). 数据插入 INSERT 用来将行插入到数据库表中,插入的方式有几种: (1)插入完整的行: INSERT INTO Customers VALUES( '1000000006 ...

  2. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  3. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  4. 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入

    文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...

  5. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  6. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  7. SQL语法语句总结(《SQL必知必会》读书笔记)

    一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...

  8. [SQL必知必会] 读书笔记

    第1课 数据库 这一课介绍SQL究竟是什么,它能做什么事情.   1.1 数据库基础 下面是一些数据库概念的简要介绍,如果你刚开始接触数据库,可以由此了解必需的基本知识.   1.1.1 数据库 数据 ...

  9. 【读书笔记】【数据库】SQL必知必会

    第1课 了解SQL 简单介绍了sql,和dbms,无重点. 第2课 检索数据 重点:select语句,distinct,limit,注释 1. select 语句如果没有明确排序查询结果,那么返回的数 ...

  10. 《SQL 必知必会》读书笔记

    第1课 了解 SQL 这章主要介绍了数据库,表,字段类型,行,列,主键和SQL等基本概念. 数据库:以某种形式存储的数据集合,在计算机上的表现形式可能是一个文件或者一组文件.我们平时所说的数据库,往往 ...

随机推荐

  1. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  2. 从源码看Azkaban作业流下发过程

    上一篇零散地罗列了看源码时记录的一些类的信息,这篇完整介绍一个作业流在Azkaban中的执行过程,希望可以帮助刚刚接手Azkaban相关工作的开发.测试. 一.Azkaban简介 Azkaban作为开 ...

  3. 关于开启.NET在线提升教育培训的通知! - 可在此页面观看在线直播!

    年前在线公开课程通知: 近期在开启VIP课程,隔天讲一次,年前其它时间插空讲公开课,主题:设计模式系列 1:培训 - 大概不会讲的内容: 1:不讲系列. 2:不讲入门. 3:不讲我不懂的! 2:培训 ...

  4. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  5. premere cs4绿色版 安装 并且 视频导出 讲解

    最近室友,开始在玩视频剪辑,用的是 premere cs4 绿色版.让他遇到的最大问题也是我之前遇到的最大问题,就是视频导出. 所以我在这里上传一套自己的一点点经验吧. 接下来,我就总结一下 我是怎么 ...

  6. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  7. [WCF]缺少一行代码引发的血案

    这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...

  8. CentOS7 重置root密码

    1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...

  9. 缓存工厂之Redis缓存

    这几天没有按照计划分享技术博文,主要是去医院了,这里一想到在医院经历的种种,我真的有话要说:医院里的医务人员曾经被吹捧为美丽+和蔼+可亲的天使,在经受5天左右相互接触后不得不让感慨:遇见的有些人员在挂 ...

  10. 谈谈JS的观察者模式(自定义事件)

    呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...