SQL实战新手入门:删除数据-DELETE语句(1)

如题所述

第1个回答  2022-10-08

   删除数据 DELETE语句( )

  删除不需要的信息与一开始时录入这些信息同等重要 在LIBRARY数据库的例子中 可能丢失或出售了一本图书 那么这本图书的信息也就无须再保存在数据库中 SQL提供了DELETE语句用于处理删除记录的情形 要删除一个表中的所有记录 可以使用下面的语句

  DELETE FROM myLibrary;

  在一些RDBMS中 无须使用FROM关键字 只需要给出表名即可 但某些RDBMS则坚持要求使用FROM关键字 执行上面的DELETE语句之后 表中的记录将被全部删除 在数据库中只剩下一个空表 读者可以从 wrox 或者 agilitator 下载相同的INSERT脚本 重新填充表中的记录

  删除的记录还可以恢复吗?这要视情况而定 为了取消对RDBMS中数据执行的操作 必须在一个事务上下文中执行所有操作 最后 要么提交所有的更改(使之永久化) 要么回滚这些操作(将数据恢复为初始状态) 第 章将讨论关于事务支持的问题

  如果将DELETE语句与之前介绍过的WHERE子句结合 就可以使删除操作具有更多的选择性 要删除特定的记录集合 只需要在WHERE子句中定义删除记录的标准 下面的查询将不加区分地删除满足WHERE子句中删除条件的所有记录

  DELETE FROM myLibrary

  WHERE publisher = Wiley ;

  执行上面的DELETE语句之后 将删除表中所有由Wiley出版社出版的图书 但这也许并不是我们需要的操作 如何才能从表中成百上千的记录中删除一条特定的记录呢?这就需要指定一组匹配条件 使得满足所有条件的记录在表中是唯一的 例如下面的例子

  DELETE FROM myLibrary

  WHERE publisher = Wiley AND pages = ;

  这样的筛选条件一定是唯一的吗?实际上 尽管可能性不大 但对于一个较大的数据库来说 存在一条以上的记录同时满足以上两个条件也并非不可能 更好的办法是使用ISBN号 因为它是唯一的

  DELETE FROM myLibrary

  WHERE i *** n= ;

  如果记录中不存在一个可作为唯一标识的标志 又该如何处理呢?有其他几种办法可以确保一条记录在表中的唯一性(请参见第 章和第 章) 但这里先介绍一个特殊列的概念 与其他列相比 特殊列的作用是唯一地标识表中的一条记录 也称为主键 假如在将记录输入到表中时已经对这些记录进行了编号 那么这些编号就是引用特定记录的一个简便的办法 假如特殊列不允许出现重复的编号 那么在删除单条记录时就不存在歧义 遗憾的是 定义这样的列需要修改表的结构

   试一试删除表中的记录

  下面将删除Microsoft SQL Server 创建的表中的某些记录 请先重复本章第一个 试一试 练习中步骤( )到步骤( )的操作 以便为输入并执行SQL命令做好准备工作

  ( ) 下面的查询将删除MYLIBRARY表中的所有记录

  USE library;

  DELETE myLibrary

  ( row(s) affected)

  ( ) 单击位于上方工具栏中的Execute按钮 如之前的图 所示

  ( ) 重新插入下面的记录

  USE library;

  INSERT INTO myLibrary (title author book_language publisher pages author

   publish_date i *** n)VALUES ( SQL Bible Alex Kriegel English Wiley

   Boris M Trukhnov April )

  INSERT INTO myLibrary(title author book_language publisher pages publish_date

  i *** n) VALUES ( Microsoft SQL Server Weekend Crash Course Alex Kriegel

   English Wiley October )

  INSERT INTO myLibrary(title author book_language publisher pages publish_date

  i *** n) VALUES ( Mindswap Robert Sheckley English Orb Books May

   )

  INSERT INTO myLibrary(title author book_language publisher pages publish_date

  i *** n) VALUES ( Jonathan Livingston Seagull Richard Bach English MacMillan

   )

  INSERT INTO myLibrary(title author book_language publisher pages publish_date

  i *** n) VALUES ( A Short History of Nearly Everything Bill Bryson

   English Broadway October )

       返回目录 SQL实战新手入门

       编辑推荐

       Oracle索引技术

       高性能MySQL

lishixinzhi/Article/program/SQL/201311/16480