MySQL数据库应用总结(十)—MySQL数据库数据的插入、更新和删除操作

SQL语法预览:

为表所有字段插入数据; 【insert into 表名(字段名1,字段名2,…) values (值1,值2,…);】

为表指定字段插入数据; 【insert into 表名(指定字段名1,指定字段名2,…) values (值1,值2,…);】

为表同时插入多条数据; 【insert into 表名(字段名1,字段名2,…) values (值1,值2,…),(值1,值2,…),…;】

将查询结果插入数据表中:【insert into 表名1 (表1字段名1,表1字段名2,…) select (表2字段名1,表2字段名2,…) from 表名2 where 查询条件;】

更新表数据:【update 表名 set 字段名1=值1, 字段名2=值2, …字段名n=值n where
(更新条件);删除表数据:【delete from
表名 where 删除条件;】

详解:

一、 插入数据

在MySQL中,可以使用insert语句向数据库表中插入数据记录,插入数据的方式有:插入完整的记录、插入记录的一部分、插入另一个查询结果,下面将一一进行讲解!

1. 为表的所有字段插入数据

语法结构:insert into 表名(字段名1,字段名2,…) values (值1,值2,…);

注意:使用该语句时字段列和数据值的数量必须相同,本章将以数据库db_data下表tb_person为例进行介绍,创建语句如下:

命令语句:

查看当前所有数据库show databases;

创建数据库:create database db_data;

选择数据库:use db_data;

创建包含字段表:create table tb_person(id int(11) unsigned not null auto_increment,name char(40) not null default ' ', age int(11) not null default 0,info char(50) null,primary key(id));

执行结果如下:

向表中的所有字段插入值的方法有两种:一种是指定所有字段名,另一种是完全不指定字段名。

案例: 在tb_person表中插入一条新纪录,id值为1,name值为Green,age值为30,info值为Lawyer。

命令语句:

insert into tb_person(id,name,age,info) values(1,'Green',30,'Lawyer');

执行插入操作之前,使用select语句查看表中数据,结果显示当前表为空,没有数据,接下来执行插入操作,结果如下:

可以看到插入记录成功。在插入数据时。指定了tb_person表的所有字段,因此将为每一个字段插入新的值。

insert语句后面的列名称顺序可以不是person表定义时的顺序。即 插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与字段的顺序相同就可以

使用insert插入数据时,允许字段名为空,此时, 需要为表的每一个字段制定值,并且值的顺序必须和数据表中定义字段时的顺序相同

案例: 在tb_person表中分别插入两条新纪录,id值为2和3,name值为Suse和Mary,age值为29和28,info值为Dancer和Musician。

命令语句:

insert into tb_person(age,id,name,info) values(29,2,'Suse','Dancer');

insert into tb_person values(3,'Mary',28,'Musician');

执行结果如下:

提示:虽然使用insert插入数据时可以忽略插入数据的列名称,但是values关键字后面的值不仅要求完整并且顺序必须和定义表时的顺序相同。如果表的结构被修改,如对表进行增加、删除或者位置改变等操作,则用这种方式插入数据时的顺序也要改变。如果指定列名称,则不会受到表结构改变的影响。

2. 为表的指定字段插入数据

为表的指定字段插入数据,就是用insert语句为部分字段插入值,而其他字段的值为定义表时的默认值。

案例: 在tb_person表中插入一条新纪录, name值为Tom,age值为27。

命令语句:

insert into tb_person(name,age) values ('Tom',27);

执行结果:

查询结果显示,id字段自动添加了一个整数值4,在这里,id字段为表的主键,不能为空,系统会自动为该字段插入自增的序列值。在插入记录时,如果某些字段没有指定插入值,MySQL将插入定义字段时的默认值。

在本例插入语句中,每有指定info字段的值,查询结果显示,info字段在定义时默认为null,因此系统自动为该字段插入空值。

提示:要保证每个插入值的类型和对应列的数据类型匹配,如果类型不同,将无法插入,并且会产生错误。

3. 为表同时插入多条记录

用insert语句可以同时为数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号隔开,基本语法格式如下:

语法结构:insert into 表名(字段名1,字段名2,…) values (值1,值2,…),(值1,值2,…),…;

案例: 在tb_person表中,为字段name、age和info指定插入值,同时插入3条记录,SQL语句如下:

命令语句:

insert into tb_person(name,age,info) values('Evans',26,'Secretary'),('Dale',23,'Cook'),('Edison',25,'Singer');

执行结果:

由结果可以看到,inset语句执行后,tb_person表中添加了3条记录,其中name、age和info字段分别为指定值,id字段为MySQL添加的默认的自增值。

使用insert语句同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息包含数的字符串的意思分别如下:

  • record:表明插入的记录条数。
  • duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重要的主键值。
  • warnings:表明有问题的数据值,例如发生哦数据类型转换。

案例: 在数据表tb_person,不指定插入字段,同时插入两条记录,SQL语句如下:

命令语句:

insert into tb_person values(8,'Harry',21,'Magician'),(null 'Harriet',23,'Pianist');

执行结果:

由结果可以看到,insert语句执行后,tb_person表中添加了2条记录。表名tb_person的后面没有指定插入字段列表,因此values关键字后面的多个值列表都要为每条记录的每一个字段指定插入值,并且这些值的顺序必须和tb_person 表中定义字段时的顺序相同 。带有auto_increment属性的id字段插入null值,系统会自动为该字段插入唯一的自增编号。

提示:一个同时插入多行记录的insert语句等同于多个单行插入记录的insert语句,但是一次插入多行记录的insert语句在处理时效率更高。所以在插入多条记录时,最好选择使用一次插入多行记录的方式插入。

4. 将查询结果插入表中

insert语句还可以将select语句查询的结果插入到表中。如果想要从另一个表中合并个人信息到tb_person表,不需要逐个输入一条记录的值,只需要使用一条insert语句和一条select语句组合的语句,即可快速地从一个或多个表中 向另一个表中插入多个记录。

基本语法格式如下:

语法结构:insert into 表名1 (表1字段名1,表1字段名2,…) select (表2字段名1,表2字段名2,…) from 表名2 where 查询条件;

先创建表tb_person2,并插入两条记录:

命令语句:

create table tb_person2(id int(11) unsigned not null auto_increment,name char(40) not null default ' ', age int(11) not null default 0,info char(50) null,primary key(id));

insert into tb_person2 values (10,'Halen',20,'Student'),(11,'Beckham',32,'Police');

执行结果如下:

案例: 从表tb_person2中查询所有记录,并将其插入到表tb_person中,使用SQL语句如下:

命令语句:

insert into tb_person (id,name,age,info) select id,name,age,info from tb_person2;

执行结果:

由结果可以看到,insert语句执行后,tb_person表中多了两条记录,这两条记录和tb_person2表中的记录完全相同,数据转移成功。这里的id字段为自增的主键,在插入的时候要保证该字段值的唯一性,如果不能确定,可以在插入的时候忽略该字段,只插入其他字段的值。

提示:这个例子中使用的tb_person2表和tb_person表的定义相同,事实上MySQL不关心select返回的列名,它 根据列的位置进行插入 select的第1列对应待插入表的第1列,第2列对应待插入表的第2列,等等

二、 更新数据

在MySQL中,可以使用update语句更新表中的记录,可以更新特定的行或者同时更新所有的行。基本语法结构如下:

语法结构:update 表名 set 字段名1=值1, 字段名2=值2, …字段名n=值n where (更新条件);

1. 更新一条记录

案例: 在tb_person表中,更新id值为11的记录,age字段值改为11,name字段改名为Hanmeimei,更新操作执行前可以使用select语句查看当前的数据,使用的SQL语句如下:

命令语句:

select * from tb_person where id=11;

update tb_person set age=11,name='Hanmeimei' where id=11;

执行结果如下:

由结果可以看到,id等于11的记录中的name和age字段的值已经被成功修改指定值。

提示:update语句以where语句结束,通过where子句指定被更新的记录所需要满足的条件, 如果忽略where子句,MySQL将更新表中所有的行

2. 更新多条记录

案例: 在tb_person表中,更新age字段值为6到25的记录,将info字段值改为Student,更新操作执行前可以使用select语句查看当前的数据,使用的SQL语句如下:

命令语句:

select * from tb_person where age between 6 and 25;

update tb_person set info='Student' where age between 6 and 25;

执行结果如下:

由结果可以看到,update语句执行后,成功将表中符合条件的6条记录的info字段值都改为student。

三、 删除数据

从数据表中删除数据使用delete语句,delete语句允许用where子句指定删除条件。delete语句的基本语法格式如下:删除没有关联的数据表

语法结构: delete from 表名 where 删除条件;

1. 删除一条记录

案例: 删除表tb_person中id=11的记录,使用SQL语句如下:

命令语句:

select * from tb_person where id=11;

delete from tb_person where id=11;

执行结果:

查询结果为空,说明删除成功。

2. 删除多条记录

案例: 删除表tb_person中age在6到25之间的记录,使用SQL语句如下:

命令语句:

select * from tb_person where age between 6 and 25;

delete from tb_person where age between 6 and 25;

执行结果:

查询结果为空,说明删除成功。

3. 删除所有记录

案例: 删除表tb_person2中所有记录,使用SQL语句如下:

命令语句:

select * from tb_person2;

delete from tb_person2;

执行结果:

查询结果为空,说明删除成功。

提示:如果向删除表中的所有记录,还可以使用truncate table 语句,truncate可以直接是年初原来的表并重新创建一个表,其语法结构为truncate table 表名。truncate是直接删除表而不是删除记录,因此执行速度比delete语句快。

本文结束,希望对大家有所帮助!

SQL语法总结:

为表所有字段插入数据; 【insert into 表名(字段名1,字段名2,…)
values (值1,值2,…);】

为表指定字段插入数据; 【insert into 表名(指定字段名1,指定字段名2,…)
values (值1,值2,…);】

为表同时插入多条数据; 【insert into 表名(字段名1,字段名2,…)
values (值1,值2,…),(值1,值2,…),…;】

将查询结果插入数据表中:【insert into 表名1 (表1字段名1,表1字段名2,…)
select (表2字段名1,表2字段名2,…) from
表名2 where 查询条件;】

更新表数据:【update 表名 set 字段名1=值1, 字段名2=值2, …字段名n=值n where (更新条件);删除表数据:【delete from 表名 where 删除条件;】

-------------------------------end----------------------

发布于 2018-03-11 20:34

文章被以下专栏收录

    未来科技008

    广读胸中有本,勤写笔下生辉。关注IT互联网应用,欢迎投稿!