SQL 更新和删除数据

SQL 更新和删除数据

一、更新数据:

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

  • 有两种使用UPDATE的方式:

    1.更新表中的特定行。

    2.更新表中的所有行。

  • 注意:不要省略WHERE子句

    • 再使用UPDATE时一定要细心。因为稍不注意,就会更新表中的所有行。
  • 提示:UPDATE与安全

    • 再客户端/服务器的DBMS中,使用UPDATE语句可能需要特殊的安全权限。再使用UPDATE前,应该保证自己有足够的安全权限。
  • 基本的UPDATE语句由三部分组成,分别是:

    1.要更新的表。

    2.列名和它们的新值。

    3.确定要更新哪些行的过滤条件。

  • 举个栗子:客户1000000005现在有了邮件地址,需要更新它的邮件地址:

    UPDATE Customers  SET  cust_email = '280773872@qq.com'  WHERE cust_id = '100000005'
    
    +------------+-----------------------+
    | cust_id    | cust_email            |
    +------------+-----------------------+
    | 1000000001 | sales@villagetoys.com |
    | 1000000002 | NULL                  |
    | 1000000003 | jjones@fun4all.com    |
    | 1000000004 | dstephens@fun4all.com |
    | 1000000005 | 280773872@qq.com      |   # 已经将100000005 的邮件地址更改了
    | 1000000006 | NULL                  |
    | 100000006  | NULL                  |
    | 10000006   | NULL                  |
    +------------+-----------------------+
    8 rows in set (0.00 sec)
    
    • UPDATE语句总是以要更新的表名开始。

      • 再上面的栗子中,要更新的表名是Customers。

      • SET命令用来将新赋值给被更新的列。再这里,SET子句设置cust_email列为指定的值

        SET cust_email = '280773872@qq.com'
        
      • UPDATE语句以WHERE子句结束,它告诉DBMS更新哪一行。没有WHERE子句,DBMS将会用这个点资邮件地址更新Customers表中的所有行。

  • 更新多个列的语法:

    UPDATE Customers
    SET cust_contact = 'Fe_Cow', cust_email = '280773872@qq.com'
    WHERE cust_id = '1000000006';
    
    +------------+--------------------+-----------------------+
    | cust_id    | cust_contact       | cust_email            |
    +------------+--------------------+-----------------------+
    | 1000000001 | John Smith         | sales@villagetoys.com |
    | 1000000002 | Michelle Green     | NULL                  |
    | 1000000003 | Jim Jones          | jjones@fun4all.com    |
    | 1000000004 | Denise L. Stephens | dstephens@fun4all.com |
    | 1000000005 | Kim Howard         | 280773872@qq.com      |
    | 1000000006 | Fe_Cow             | 280773872@qq.com      |
    | 100000006  | NULL               | NULL                  |
    | 10000006   | NULL               | NULL                  |
    +------------+--------------------+-----------------------+
    8 rows in set (0.00 sec)
    
    • 再更新多个列时,只需要使用一条SET命令,每个列=值对之间用逗号分隔(最后一列之后不用逗号)
    • 注意:再UPDATE语句中使用子查询
      • UPDATE语句中可以使用子查询,使得能用SELECT语句检索出的数据更新列数据。
  • 要删除某个列的值,可设置它为NULL(假如表定义允许NULL值)

    UPDATE Customers SET cust_email = NULL WHERE cust_id = '1000000005';
    
    +------------+--------------------+-----------------------+
    | cust_id    | cust_contact       | cust_email            |
    +------------+--------------------+-----------------------+
    | 1000000001 | John Smith         | sales@villagetoys.com |
    | 1000000002 | Michelle Green     | NULL                  |
    | 1000000003 | Jim Jones          | jjones@fun4all.com    |
    | 1000000004 | Denise L. Stephens | dstephens@fun4all.com |
    | 1000000005 | Kim Howard         | NULL                  |
    | 1000000006 | Fe_Cow             | 280773872@qq.com      |
    | 100000006  | NULL               | NULL                  |
    | 10000006   | NULL               | NULL                  |
    +------------+--------------------+-----------------------+
    8 rows in set (0.00 sec)
    
    • 其中NULL用来去除cust_email列中的值。这与保存空字符串很不同(空字符串用' ' 表示,是一个值),而NULL表示没有值

二、删除数据:

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

  • 有两种使用DELETE的方式:

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

    2.从表中删除所有行。

  • 注意:不要省略WHERE子句

    • 再使用DELETE时一定要细心。因为稍不注意,就会错误地删除表中所有行。
  • 提示:DELETE与安全

    • 再客户端/服务器的DBMS中,使用DELETE语句可能需要特殊的安全权限。再使用DELETE前,应该保证自己有足够的安全权限。
  • 下面的语句从Customers表中删除一行:

    DELETE FROM Customers WHERE cust_id = '1000000006';
    
    • DELETE FROM 要求指定从中删除数据的表名,WHERE子句过滤要删除的行。
    • 再这个栗子中,只删除顾客’1000000006’。
    • 如果省略WHERE子句,它将删除表中每个顾客。
  • 注意:FROM 关键字

    • 再某些SQL实现中,跟在DELETE后的关键字FROM是可选的。但是即使不需要,也最好提供这个关键字。这样做将保证SQL代码再DBMS之间可移植。
  • DELETE 不需要列名或通配符。DELETE删除整行而不是删除列。

  • 要删除指定的列,请使用UPDATE语句。

  • 注意:删除的是表的内容,而不是删除表

    • DELETE语句从表中删除行,甚至是删除表中所有行。但是,DELETE不删除表本身。
  • 提示:更快的删除

    • 如果想从表中删除所有行,不要使用DELETE。

    • 可使用TRUNCATE TABLE语句,它完成的相同工作,而速度更快(因为不记录数据的变动)

      TRUNCATE TABLE custcopy[表名];
      
      mysql> SELECT * FROM Custcopy;
      Empty set (0.00 sec)
      
      • Custcopy 表中所有行的数据都已经被清空。

三、更新和删除的原则:

  • 上面使用的UPDATE和DELETE语句都有WHERE子句,这样做的理由很充分。

    • 如果省略了WHERE子句,则UPDATE 和 DELETE将被应用到表中所有的行。
    • 简单的说,如果执行UPDATE而不带WHERE子句,则表中每一行都将用新值更新。类似地,如果执行DELETE语句而不带WHERE子句,表的所有数据都将被删除。
  • 下面是许多SQL程序使用UPDATE或者DELETE时所遵循的重要原则。

    1.除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。

    2.保证每个表都有主键,尽可能像WHERE子句那样使用它(可以指定各个主键、多个值或值范围)。

    3.在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。

    4.使用强制实施引用完整性的数据库,这样DBMS将不允许删除其数据与其他表相关联的行。

    5.有的DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句。如果所采用的DBMS支持这个特性,应该使用它。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值