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----------------------