第九章:第14节 MySQL基础篇——数据操作语言DML

更新于:2017-10-16 19:44:29

如何创建表前面已介绍完毕,我们开始学习用SQL语句如何往表里插入数据修改数据删除数据


数据插入(添加数据)

3种形式:

形式一:insert [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....), (.....), ....;

形式二:insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,....;

形式三:insert [into] 表名 [(字段名1,字段名2,....)] select 字段名1,字段名2,.... from 其他表名;


解释说明:


1、形式一和形式三可以一次性插入多条数据,且形式三的数据来源是由其中的select语句所获取的。


2、形式一和形式三的字段列表部分可以省略(但严重不推荐),此时值列表部分必须依次完全对应该表的每一个字段。


3、不管哪种形式,字段名和字段值都有“一一对应”关系:数量,顺序和类型都应该对应。


4、不管哪种形式,每次插入都必然是以“行”为单位进行,要么成功插入一行,要么失败。对于语句中没有给定的字段,成功的插入必然会根据表或系统的设定而获得“默认值”(有时候默认值就是空值“null”)


5、注意字符串类型和时间日期类型的字面量值通常都需要用单引号引起来,比如:'abc', '2013-4-5 6:7:8"。


6、语句中所给定的字段名的顺序可以不是表中的实际顺序。


7、有的字段通常都无需插入数据,比如具有auto_increment属性的字段,或类型为timestamp的字段。


举例:

1.png

1.png


1.png


插入数据形式一和形式二用的多,大家要多去练习数据插入SQL语句的书写,必须要掌握的。


replace into用法:


REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。 

注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该

语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。


了解有这种语法就可以了,用的不是特别多。


其他类似插入数据的语句:

载入文本数据(了解就行,也都用不到):


load data infile语法:这个语法比较复杂,知道就行,其作用是从一个外部的记事本文件中导入数据到某个表中。该记事本中的数据通常要求“比较整齐”,一行文本对应表的一行数据,一行中用某种字符(通常用tab符)来分割一个一个字段的值,类似这样:


psb (1).jpg

载入语法:

1.png



复制一个表的结构和数据:

create  table  表名1  select  *  from  表名2; 


删除数据

基本语法形式:

delete from 表名 [where条件] [order排序] [limit限定]

解释说明:

1,观念问题:删除也是应该以理解为“以行为单位”进行的。

2,删除语句中,where条件通常都要写上,因为如果不写,则就删除了所有数据,应用中极少如此。

3order排序子句和limit限定子句,应用中通常不需要。

3.1 order排序子句用于设定删除数据的先后顺序。

3.2 limit限定子句用于限定在设定的顺序情况下删除指定的某些行。

类似删除语句truncate

truncate [table] 表名;用于直接删除整个表(结构)并重新创建该表。

1,删除整个表(数据和结构都没有了)

2,重新创建该表(全新表)。

3,跟delete 语句不带where条件,有什么区别?

主要影响的是类似:auto_increment这种类型的字段值:

truncate结果会重新计算,delete还能继续增长。

举例:


按条件删除:

1.png

1.png


where子句可以有哪些运算符?可以有比较运算符、逻辑运算符,主要有等于、大于、小于……

等到学习查询数据时再详细介绍。


delete删除全表:

1.png

1.png

id是不是从5开始添加数据的。


truncate删除全表:

1.png

1.png


id重新计算。


修改数据

基本语法:

update 表名 set 字段名1=值表达式1,字段名2=值表达式2,....[where条件] [order排序] [limit限定]

 

语法说明

1, 观念问题:仍然要理解为更新是以“行”为单位进行的,虽然可以指定只更新其中的部分字段。

2where条件子句,在应用中,同样几乎都必须有,否则很可能就失去意义,类似delete

3order排序子句通常不需要,用于将要更新的数据指定更新的顺序。

4limit限定子句通常不需要,用于将要更新的数据的指定顺序去更新部分(局部)数据,比如:前500行。

5,字段的值可以是表达式,或直接值,或函数,如果是直接值,同样遵循insert语句中的值的写法。

 

举例:

1.png

1.png


到此,数据的增删改就讲完了,没什么难度,很简单,大家要多去练习才能变得熟练,这节内容很重要的。

虽然以后用PHP做开发时,会把基础的数据库操作封装到一个类里直接拿来调用,可也免不了直接在cmd或Navicat用SQL语句对数据做增删查改。


还记得第4节对数据库的备份操作吗?打开备份文件data.sql,其实会发现里面写都的都是一些SQL语句。


1.png


重新创建表,然后执行批量的插入语句。


一个问题:复制表

复制表方法1:

create table tab2 like tab1; //复制结构了

insert into tab2 select * from tab1; //复制数据

这种方法可以比较完整。

 

复制表方法2:

create table tab2 select * from tab1; //同时复制结构和数据

这种方法可能会丢一些结构信息,比如:索引,约束,自增长属性




本节学习代码》》》