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. RecyclerView使用大全

    RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...

  2. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  3. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  4. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  5. Java定时任务的常用实现

    Java的定时任务有以下几种常用的实现方式: 1)Timer 2)ScheduledThreadPoolExecutor 3)Spring中集成Cron Quartz 接下来依次介绍这几类具体实现的方 ...

  6. 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed

    之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...

  7. scanf类型不匹配造成死循环

        int i = 0; while (flag) { printf("please input a number >>> "); scanf("% ...

  8. Android手机相册的布局

    实现类似下面的这种布局的方法

  9. git init和git init -bare区别

    1 Git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...

  10. linux中kvm的安装及快照管理

    一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...