MySQL必知必会——第二十章更新和删除数据

更新和删除数据

本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据。

更新数据

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

UPDATE的两种用法:

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

不要省略WHERE子句 缺少WHERE子句的过滤,UPDATE将更新所有行。除非需要,不要省略WHERE子句。
UPDATE与安全 可以限制和控制UPDATE语句的使用。

UPDATE语句非常简单,它由三部分组成:

  • 要更新的表。
  • 要更新的列和新的列值。
  • 要更新行的过滤条件。

更新客户10005的电子邮箱地址:

mysql> UPDATE customers
    -> SET cust_email = '[email protected]'
    -> WHERE cust_id = 10005;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

UPDATE语句以要更新的表名开始。SET命令将新值赋给要更新的列。WHERE子句告诉MySQL要更新哪一行。没有WHERE子句,将更新所有行的邮箱地址,这不是我们想要的。

更新多个列:

mysql> UPDATE customers
    -> SET cust_name = 'The Fudds',
    ->     cust_email = '[email protected]'
    -> WHERE cust_id = 10005;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

更新多个列,只需要使用单个SET命令,每个更新的列和新列值间用逗号分隔(最后一列不用逗号)。

  • 在UPDATE语句中使用子查询 UPDATE语句中可以使用子查询(MySQL必知必会——第十四章使用子查询),使用SELECT语句检索出的数据更新列数据。
  • IGNORE关键字 如果用UPDATE语句更新多行时发生错误,那整个UPDATE操作将被取消(数据回滚至执行语句前)。可以使用IGNORE关键字,即使个别行发生错误,合法行也会继续更新。
    使用示范:
    UPDATE IGNORE customers
    

为了删除某个列的值,可以把它设置成NULL(如果允许):

mysql> UPDATE customers
    -> SET cust_email = NULL
    -> WHERE cust_id = 10005;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

删除数据

为了删除数据,可以使用DELETE语句。
使用DELETE语句的两种方式:

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

不要省略WHERE子句 缺少WHERE子句的过滤,DELETE将删除所有行。除非需要,不要省略WHERE子句。
DELETE与安全 可以限制和控制DELETE语句的使用。

DELETE语句比UPDATE语句更为简单:

mysql> DELETE FROM customers
    -> WHERE cust_id = 10006;
Query OK, 1 row affected (0.01 sec)

此语句删除客户10006的数据。DELETE FROM要求指定要删除数据的表名。WHERE子句过滤要删除的行。若省略WHERE子句,将删除customers表中所有行。

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

  • 删除表的内容而不是表 DELETE语句从表中删除行,但DELETE不删除表本身。
  • 更快的删除 如果想删除表中所有行,可以使用TRUNCATE TABLE语句。它完成相同的工作,但速度更快。原理:销毁原来的表,再重新创建一个表。它不需要逐行删除数据。

更新和删除的指导原则

使用更新和删除的良好习惯:

  • 除非更新和删除每一行,否则绝对不要省略WHERE子句。
  • 保证每个表都有主键(MySQL必知必会——第十五章联结表),WHERE子句尽可能多用主键进行过滤。
  • 对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证要更新或删除的行是我们需要的。
  • 使用强制实施引用完整性的数据库(MySQL必知必会——第十五章联结表),这样MySQL将不允许删除具有与其他表相关联的数据的行。

小心使用 MySQL没有撤销(undo)按钮。应该非常小心地使用UPDATE和DELETE,否则出现错误会很难受。

你可能感兴趣的:(MySQL必知必会,mysql,数据库,database,数据库开发,sql)