MySQL第19章、第20章、第21章 插入数据、更新和删除数据、创建和操纵表

插入数据

数据插入

毫无疑问,SELECT是最常使用的SQL语句了(这就是为什么前17章 讲的都是它的原因)。但是,还有其他3个经常使用的SQL语句需要学习。 第一个就是INSERT(下一章介绍另外两个)。

顾名思义,INSERT是用来插入(或添加)行到数据库表的。插入可 以用几种方式使用:

 插入完整的行;
 插入行的一部分;
 插入多行;
 插入某些查询的结果。
下面将介绍这些内容。
在这里插入图片描述

插入完整的行

把数据插入表中的最简单的方法是使用基本的INSERT语法,它要求指定表名和被插入到新行中的值。下面举一个例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

插入多个行

INSERT可以插入一行到一个表中。但如果你想插入多个行怎么办?
可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结
束,如下所示:
在这里插入图片描述
在这里插入图片描述

插入检索出的数据

INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在 另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所 谓的INSERT SELECT,顾名思义,它是由一条INSERT语句和一条SELECT 语句组成的。

假如你想从另一表中合并客户列表到你的customers表。不需要每次 读取一行,然后再将它用INSERT插入,可以如下进行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更新和删除数据

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

更新数据

为了更新(修改)表中的数据,可使用UPDATE语句。可采用两种方 式使用UPDATE:
 更新表中特定行;
 更新表中所有行。
下面分别对它们进行介绍。
在这里插入图片描述
UPDATE语句非常容易使用,甚至可以说是太容易使用了。基本的 UPDATE语句由3部分组成,分别是:
 要更新的表;
 列名和它们的新值;
 确定要更新行的过滤条件。
举一个简单例子。客户10005现在有了电子邮件地址,因此他的记录需要更新,语句如下:
在这里插入图片描述
在这里插入图片描述

删除数据

为了从一个表中删除(去掉)数据,使用DELETE语句。
可以两种方式使用DELETE:
 从表中删除特定的行;
 从表中删除所有行。
下面分别对它们进行介绍。
在这里插入图片描述
在这里插入图片描述

更新和删除的指导原则

前一节中使用的UPDATE和DELETE语句全都具有WHERE子句,这样做的 理由很充分。如果省略了WHERE子句,则UPDATE或DELETE将被应用到表中 所有的行。换句话说,如果执行UPDATE而不带WHERE子句,则表中每个行 都将用新值更新。类似地,如果执行DELETE语句而不带WHERE子句,表的 所有数据都将被删除。

下面是许多SQL程序员使用UPDATE或DELETE时所遵循的习惯。

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

 保证每个表都有主键(如果忘记这个内容,请参阅第15章),尽可能 像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)。  在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进
行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不
正确。

 使用强制实施引用完整性的数据库(关于这个内容,请参阅第15
章),这样MySQL将不允许删除具有与其他表相关联的数据的行。
在这里插入图片描述

创建和操纵表

本章讲授表的创建、更改和删除的基本知识。

创建表

MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所
有操作,包括表本身的创建和处理。
一般有两种创建表的方法:
 使用具有交互式创建和管理表的工具(如第2章讨论的工具);
 表也可以直接用MySQL语句操纵。

为了用程序创建表,可使用SQL的CREATE TABLE语句。值得注意的是,在使用交互式工具时,实际上使用的是MySQL语句。但是,这些语 句不是用户编写的,界面工具会自动生成并执行相应的MySQL语句(更 改现有表时也是这样)。
在这里插入图片描述

表创建基础

为利用CREATE TABLE创建表,必须给出下列信息:

 新表的名字,在关键字CREATE TABLE之后给出;
 表列的名字和定义,用逗号分隔。
CREATE TABLE语句也可能会包括其他关键字或选项,但至少要包括表的 名字和列的细节。下面的MySQL语句创建本书中所用的customers表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用NULL值

在这里插入图片描述
在这里插入图片描述

主键再介绍

正如所述,主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则 这些列的组合值必须唯一。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用AUTO_INCREMENT

在这里插入图片描述
在这里插入图片描述

指定默认值

如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。
默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。 请看下面的例子:
在这里插入图片描述
在这里插入图片描述

引擎类型

你可能已经注意到,迄今为止使用的CREATE TABLE语句全都以
ENGINE=InnoDB语句结束。

与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。 在你使用CREATE TABLE语句时,该引擎具体创建表,而在你使用SELECT 语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候, 此引擎都隐藏在DBMS内,不需要过多关注它。

但MySQL与其他DBMS不一样,它具有多种引擎。它打包多个引擎, 这些引擎都隐藏在MySQL服务器内,全都能执行CREATE TABLE和SELECT 等命令。

为什么要发行多种引擎呢?因为它们具有各自不同的功能和特性, 为不同的任务选择正确的引擎能获得良好的功能和灵活性。

当然,你完全可以忽略这些数据库引擎。如果省略ENGINE=语句,则 使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它。但并 不是所有语句都默认使用它,这就是为什么ENGINE=语句很重要的原因
(也就是为什么本书的样列表中使用两种引擎的原因)。 以下是几个需要知道的引擎:
 InnoDB 是 一 个 可 靠 的 事 务 处 理 引 擎 ( 参 见 第 2 6 章 ), 它 不 支 持 全 文 本搜索;
 MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘) 中,速度很快(特别适合于临时表);
 MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章), 但不支持事务处理。
在这里插入图片描述

更新表

为更新表定义,可使用ALTER TABLE语句。但是,理想状态下,当表中存储数据以后,该表就不应该再被更新。在表的设计过程中需要花费大量时间来考虑,以便后期不对该表进行大的改动。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

删除表

在这里插入图片描述

重命名表

在这里插入图片描述