《MySQL必知必会》读书笔记 —— 第19章 插入数据、第20章 更新和删除数据、第21章 创建和操纵表

文章目录

  • 第19章 插入数据

    • 19.2 数据插入
  • 19.2 插入完整的行

  • 19.3 插入多个行

  • 19.4 插入检索出的数据

  • 第20章 更新和删除数据

    • 20.1 更新数据
  • 20.2 删除数据

  • 第21章 创建和操纵表

    • 21.1 创建表
  • 21.2 更新表

  • 21.3 删除表

  • 21.4 重命名表

第19章 插入数据

=========================================================================

19.2 数据插入


顾名思义,INSERT是用来插入(或添加)行到数据库表的。插入可

以用几种方式使用:

  1. 插入完整的行;

  2. 插入行的一部分;

  3. 插入多行;

  4. 插入某些查询的结果。

19.2 插入完整的行


INSERT INTO my_table VALUES(col1_val,col2_val,……,coln_val);

这样的插入不介意使用,一方面它依赖列的顺序,而且必须给出所有列的值。

一种更啰嗦,但更安全的做法,也是推荐的做法,

INSERT INTO my_table(

col1,

col2,

……

coln)

VALUES(

val1,

val2,

……,

valn);

这种做法没有必要给出所有列,而且不需要知道列的顺序,只需要知道有哪些列即可。

但是省略的列,必须或者可以为null,或者有默认值

19.3 插入多个行


此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。

INSERT INTO my_table(

col1,

col2,

……

coln)

VALUES(

val1_1,

val1_2,

……,

val1_n

),

(

val2_1,

val2_2,

……,

val2_n

);

其中单条INSERT语句有多组值,每组值用一对圆括号括起来,

用逗号分隔。

19.4 插入检索出的数据


INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在

另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所

谓的INSERT SELECT,顾名思义,它是由一条INSERT语句和一条SELECT

语句组成的。

INSERT SELECT 语句类似一种子查询。

举个例子,有customer,custnew(新来的客户),现在需要把新来的客户导入到customer里。怎么做?

INSERT INTO customer

(

cust_id,

cust__email,

cust_address

)

SELECT

cust_id,

cust__email,

cust_address

FROM custnew;

要注意的是,进行的匹配的
时候,仅仅是根据列出的顺序与列名毫无关系

第20章 更新和删除数据

============================================================================

20.1 更新数据


  1. 要更新的表

  2. 列名和它们的值

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

UPDATE my_table

SET col1 = val1,

col2 = val2,

col3 = val3

WHERE (filter condition);

注意:如果没有过滤条件,就会更新表中所有行的数据,这是一个很危险的操作

  • UPDATE语句中使用子查询也是可以的。

  • UPDATE语句具有回滚特性

如果update语句要更新很多行,有些成功更新,有些更新失败。

那么只要有一个更新失败,**则整个UPDATE操作被取消

(错误发生前更新的所有行被恢复到它们原来的值)。**。

很明显这样做是比较安全的,但是如果确实想要即使某一行发生了错误,也不妨碍其余行的更新,就可以使用IGNORE关键字。

UPDATE IGNORE …

  • 将某个列的值删除

所谓删除其实是置空,SET col = NULL 即可。

20.2 删除数据


DELETE FROM my_table

WHERE (filter condition);

如果没有过滤条件,会删除所有行,这是一个很危险的操作!

DELETE不需要列名或通配符。DELETE删除整行而不是删除列。为了

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

  • 删除表的内容而不是表

DELETE语句从表中删除行,甚至是删除表中所有行。但是,DELETE不删除表本身。

  • 更快的删除

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

可使用TRUNCATE table_name语句,它完成相同的工作,但速度更(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。

几条使用的建议:

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE

子句的UPDATE或DELETE语句。

  • 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进

行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不

正确。

  • 使用强制实施引用完整性的数据库(关于这个内容,请参阅第15

章),这样MySQL将不允许删除具有与其他表相关联的数据的行。

第21章 创建和操纵表

===========================================================================

21.1 创建表


一般有两种创建表的方法:

  • 使用具有交互式创建和管理表的工具(如第2章讨论的工具);
  • 表也可以直接用MySQL语句操纵。

由于一般使用图形化工具创建,这里不再拘泥于语法。

讲一下注意点就好。

基本语法:

create table my_table

(

id int NOT NULL AUTO_INCREMENT ,

name char(100) NOT NULL ,

address char(200) NULL ,

PRIMARY KEY (id)

) ENGINE = InnoDB;

  • 主键

主键值必须唯一。即,表中的每个行必须具有唯一的主

键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则

这些列的组合值必须唯一。

为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名,

PRIMARY KEY(colx,coly,colz)

**每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通

过使它成为主键)。**

  • 确定AUTO_INCREMENT值

那么,如何在使用AUTO_INCREMENT列时获得这个值呢?可使

用last_insert_id()函数获得这个值,如下所示:

SELECT last_insert_id()

此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于

后续的MySQL语句。

  • 指定默认值

使用DEFAULT 关键字即可。

quantity int NOT NULL DEFAULT 1

  • 引擎类型

创建表的时候,可以指定引擎类型,默认是InnoDB.

以下是几个需要知道的引擎:

1 InnoDB是一个可靠的事务处理引擎(参见第26章),它不支持全文

本搜索;

2 MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)

中,速度很快(特别适合于临时表);

3 MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章),

但不支持事务处理。

引擎类型可以混用。

21.2 更新表


理想状态下,当表中存储数据以后,该表就不应该再被更新。

在表的设计过程中需要花费大量时间来考虑,以便后期不对该表进行大的改动。

ALTER TABLE table_name +操作

这里书上还讲了ALTER TABLE 增加外键,由于感觉比较重要。

另起一篇细讲。

复杂的表结构更改一般需要手动删除过程

  1. 用新的列布局创建一个新表;

  2. 使用INSERT SELECT语句(关于这条语句的详细介绍,请参阅第

19章)从旧表复制数据到新表。如果有必要,可使用转换函数和

计算字段;

  1. 检验包含所需数据的新表;

  2. 重命名旧表(如果确定,可以删除它);

  3. 用旧表原来的名字重命名新表;

  4. 根据需要,重新创建触发器、存储过程、索引和外键。

21.3 删除表


DROP TABLE table_name

注意:**这条语句删除customers 2表(假设它存在)。删除表没有确认,

也不能撤销,执行这条语句将永久删除该表。**

21.4 重命名表


RENAME TABLE oldname TO newname;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值