1、第3章添加更新与删除数据Word版第3章 添加、更新与删除数据学习目标学会为数据表的字段添加数据学会更新数据表中的数据学会删除数据表中的数据通过上一章的学习,相信大家对数据库和数据表的基本操作有了一定了解,但要想操作数据库中的数据,必须得通过MySQL提供的数据库操作语言实现,包括插入数据的INSERT语句,更新数据的UPDATE语句以及删除数据的DELETE语句,本章将针对这些操作进行详细地讲解。添加数据要想操作数据表中的数据,首先得保证数据表中存在数据。MySQL使用INSERT语句向数据表中添加数据,并且根据添加方式的不同分为三种,分别是为表的所有字段添加数据、为表的指定字段添加数据、同
2、时添加多条记录。本节将针对这三种添加数据的方式进行详细地讲解。3.1.1为表中所有字段添加数据通常情况下,向数据表中添加的新记录应该包含表所有字段,即为该表中的所有字段添加数据,为表中所有字段添加数据的INSERT语句有两种,具体如下:1、INSERT语句中指定所有字段名向表中添加新记录时,可以在INSERT语句中列出表的所有字段名,其语法格式如下所示:INSERT INTO 表名(字段名1,字段名2,) VALUES(值1,值2,);在上述语法格式中,“字段名1,字段名2,”表示数据表中的字段名称,此处必须列出表所有字段的名称;“值1,值2,”表示每个字段的值,每个值的顺序、类型必须与对应的
3、字段相匹配。【例3-1】向student表中添加一条新记录,记录中id字段的值为1,name字段的值为zhangsan,grade字段的值为98.5。在添加新记录之前需要先创建一个数据库chapter03,创建数据库的SQL语句如下所示:CREATE DATABASE chapter03;选择使用数据库chapter03,SQL语句如下:USE chapter03;在数据库中创建一个表student用于存储学生信息,创建student表的SQL语句如下所示:CREATE TABLE student( id INT(4), name VARCHAR(20) NOT NULL, grade FLO
4、AT);使用INSERT语句向student表中插入一条数据,SQL语句如下所示:INSERT INTO student(id,name,grade) VALUES(1,zhangsan,98.5);当上述SQL语句执行成功后,会在表student中添加一条数据。为了验证数据是否添加成功,使用SELECT语句查看student表中的数据,查询结果如下: mysql SELECT * FROM student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 |+-+-+-+1 row in set (0.00 sec)从查询结果可
5、以看出,student表中成功地添加了一条记录,“1 row in set”表示查询出了一条记录。关于SELECT查询语句的相关知识,将在第4章进行详细讲解,这里大家有个大致印象即可。需要注意的是,使用INSERT语句添加记录时,表名后的字段顺序可以与其在表中定义的顺序不一致,它们只需要与VALUES中值的顺序一致即可。【例3-2】 向student表中添加一条新记录,记录中id字段的值为2,name字段的值为lisi,grade字段的值为95,SQL语句如下所示:INSERT INTO student(name,grade,id)VALUES(lisi,95,2); 执行结果如下所示:mys
6、ql INSERT INTO student(name,grade,id) - VALUES(lisi,95,2);Query OK, 1 row affected (0.02 sec)从执行结果可以看到,三个字段id,name和grade的顺序进行了调换,同时VALUES后面值的顺序也做了相应地调换,INSERT语句同样执行成功,接下来通过查询语句查看数据是否成功添加,执行结果如下所示:mysql select * from student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 |+-
7、+-+-+2 rows in set (0.00 sec) 从查询结果可以看出,student表中同样成功地添加了一条记录。2、INSERT语句中不指定字段名在MySQL中,可以通过不指定字段名的方式添加记录,其基本的语法格式如下所示:INSERT INTO 表名 VALUES(值1,值2,); 在上述格式中,“值1,值2,”用于指定要添加的数据。需要注意的是,由于INSERT语句中没有指定字段名,添加的值的顺序必须和字段在表中定义的顺序相同。【例3-3】 向student表中添加一条新记录,记录中id字段的值为3,name字段的值为wangwu,grade字段的值为61.5,INSERT语句
8、如下所示:INSERT INTO studentVALUES(3,lisi,61.5);SQL语句执行成功后,同样会在student表中添加一条新的记录。为了验证数据是否添加成功,使用SELECT语句查看student表中的数据,查询结果如下所示:mysql select * from student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 |+-+-+-+3 rows in set (0.00 sec)从上述结果可以看出,student表中成功添加
9、了一条记录。由此可见,INSERT语句中不指定字段名同样成功添加数据。3.1.2为表的指定字段添加数据为表的指定字段添加数据,就是在INSERT语句中只向部分字段中添加值,而其他字段的值为表定义时的默认值。为表的指定字段添加数据的基本语法格式如下所示:INSERT INTO 表名(字段1,字段2,) VALUES(值1,值2,)在上述语法格式中,“字段1,字段2,”表示数据表中的字段名称,此次只指定表中部分字段的名称。“值1,值2,”表示指定字段的值,每个值的顺序、类型必须与对应的字段相匹配。【例3-4】 向student表中添加一条新记录,记录中id字段的值为4,name字段的值为“zhao
10、liu”,grade字段不指定值,SQL语句如下所示:INSERT INTO student(id,name)VALUES(4,zhaoliu);上述SQL语句执行成功后,会向student表中添加一条新的数据。为了验证数据是否添加成功,使用SELECT语句查看student表,结果如下所示:mysql select * from student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 | 4 | zhaoliu | NULL |+-+-+-+4 r
11、ows in set (0.00 sec)从查询结果可以看出,新记录添加成功,但是grade字段的值为NULL。这是因为在添加新记录时,如果没有为某个字段赋值,系统会自动为该字段添加默认值。通过SQL语句“SHOW CREATE TABLE studentG”可以查看student表的详细结构,SQL执行结果如下所示:mysql SHOW CREATE TABLE studentG* 1. row * Table: studentCreate Table: CREATE TABLE student ( id int(4) DEFAULT NULL, name varchar(20) NOT N
12、ULL, grade float DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)从表的详细结构中可以看出,grade字段的默认值为NULL。本例中没有为grade字段赋值,系统会自动为其添加默认值NULL。需要注意的是,如果某个字段在定义时添加了非空约束,但没有添加default约束,那么插入新记录时就必须为该字段赋值,否则数据库系统会提示错误。【例3-5】向student表中添加一条新记录,记录中id字段的值为5,grade字段的值为97,name字段不指定值,SQL语句如下所示:INSERT I
13、NTO student(id,grade) VALUES(5,97);执行结果如下所示:mysql INSERT INTO student(id,grade) - VALUES(5,97);ERROR 1364 (HY000): Field name doesnt have a default value从执行结果可以看出,执行INSERT语句时发生了错误,发生错误的原因是name字段没有指定默认值,且添加了非NULL约束。接下来,通过查询语句查看数据是否成功添加,执行结果如下所示:mysql SELECT * FROM student;+-+-+-+| id | name | grade |
14、+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 | 4 | zhaoliu | NULL |+-+-+-+4 rows in set (0.00 sec)通过查询结果可以看到,student表中仍然只有4条记录,新记录没有添加成功。为指定字段添加数据时,指定字段也无需与其在表中定义的顺序一致,它们只要与VALUES中值的顺序一致即可。【例3-6】向student表中添加一条新记录,记录中name字段的值为sunbin,grade字段的值为55,id字段不指定值,SQL语句如下所示:INSERT INTO stud
15、ent(grade,name)VALUES(55,sunbin);执行INSERT语句向student表中添加数据,然后通过查询语句查看数据是否成功添加,执行结果如下所示:mysql SELECT * FROM student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 | 4 | zhaoliu | NULL | NULL | sunbin | 55 |+-+-+-+5 rows in set (0.00 sec)从查询结果可以看出,新记录添加成功。
16、多学一招:INSERT语句其他写法INSERT语句还有一种语法格式,可以为表中指定的字段或者全部字段添加数据,其格式如下所示:INSERT INTO 表名SET 字段名1=值1,字段名2=值2, 在上面的语法格式中,“字段名1”、“字段名2”是指需要添加数据的字段名称,“值1”、“值2”表示添加的数据。如果在SET关键字后面指定了多个“字段名=值”对,每对之间使用逗号分隔,最后一个“字段名=值”对之后不需要逗号。接下来通过一个案例来演示使用这种语法格式向student表中添加记录。【例3-7】向student表中添加一条新记录,该条记录中id字段的值为5,name字段的值为boya,grade
17、字段的值为99,INSERT语句如下所示:INSERT INTO studentSET id=5,name=boya,grade=99; 执行结果如下所示:mysql INSERT INTO student - SET id=5,name=boya,grade=99;Query OK, 1 row affected (0.00 sec) 从执行结果可以看到INSERT语句成功执行,接下来通过查询语句查看数据是否成功添加,执行结果如下所示:mysql SELECT * FROM student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan|
18、98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 | 4 | zhaoliu | NULL | NULL | sunbin | 55 | 5 | boya | 99 |+-+-+-+6 rows in set (0.00 sec)从查询结果可以看出,student表中新记录添加成功。3.1.3同时添加多条记录有时候,需要一次向表中添加多条记录,当然,我们可以使用上面学习的两种方式将记录逐条添加,但是这样做需要书写多条INSERT语句,比较麻烦。其实,在MySQL中提供了使用一条INSERT语句同时添加多条记录的功能,其语法格式如下所示:INSERT INTO 表
19、名(字段名1,字段名2,) VALUES(值1,值2,),(值1,值2,), (值1,值2,); 在上述语法格式中,“(字段名1,字段名2,)”是可选的,用于指定插入的字段名。“(值1,值2,)”表示要插入的记录,该记录可以有多条,并且每条记录之间用逗号隔开。【例3-8】向student表中添加三条新记录,INSERT语句如下所示:INSERT INTO student VALUES(6,lilei,99),(7,hanmeimei,100),(8,poly,40.5); 执行结果如下所示:mysql INSERT INTO student VALUES - (6,lilei,99), - (
20、7,hanmeimei,100), - (8,poly,40.5);Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0从执行结果可以看出,INSERT语句成功执行。其中“Records:3”表示添加三条记录,“Duplicates:0”表示添加的三条记录没有重复,“Warning:0”表示添加记录时没有警告。在添加多条记录时,可以不指定字段列表,只需要保证VALUES后面跟随的值列表依照字段在表中定义的顺序即可。接下来通过查询语句查看数据是否成功添加,执行结果如下所示:mysql SELECT * F
21、ROM student;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 | 2 | lisi | 95 | 3 | wangwu | 61.5 | 4 | zhaoliu | NULL | NULL | sunbin | 55 | 5 | boya | 99 | 6 | lilei | 99 | 7 | hanmeimei | 100 | 8 | poly | 40.5 |+-+-+-+8 rows in set (0.00 sec)从查询结果可以看到,student表中添加了三条新的记录。 和添加单条记录一样,如果不指定字段名
22、,必须为每个字段添加数据,如果指定了字段名,就只需要为指定的字段添加数据。【例3-9】向student表中添加三条新记录,记录中只为id和name字段添加值,INSERT语句如下所示:INSERT INTO student(id,name) VALUES(9,liubei),(10,guanyu),(11,zhangfei);执行INSERT语句向student表中添加数据,然后通过查询语句查看数据是否成功添加,执行结果如下所示:mysql SELECT * FROM student - WHERE id8;+-+-+-+| id | name | grade |+-+-+-+| 9 | li
23、ubei | NULL | 10 | guanyu | NULL | 11 | zhangfei | NULL |+-+-+-+3 rows in set (0.01 sec)通过查询结果可以看出,student表中添加了3条新的记录,由于INSERT语句中没有为grade字段添加值,系统自动为其添加默认值NULL。需要注意的是,由于student表中存在多条记录,都查询出来不便于观察,因此在查询语句中使用了WHERE子句来指定查询条件,WHERE id8限定了只查询student表中id值大于8的记录。更新数据更新数据是指对表中存在的记录进行修改,这是数据库常见的操作,比如某个学生改了名字,
24、就需要对其记录信息中的name字段值进行修改。MySQL中使用UPDATE语句来更新表中的记录,其基本的语法格式如下所示:UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2, WHERE 条件表达式在上述语法格式中,“字段名1”,“字段名2”用于指定要更新的字段名称,“值1”,“值2”用于表示字段更新的新数据。“WHERE条件表达式”是可选的,用于指定更新数据需要满足的条件。UPDATE语句可以更新表中的部分数据和全部数据,下面就对这两种情况进行讲解:1、UPDATE更新部分数据更新部分数据是指根据指定条件更新表中的某一条或者某几条记录,需要使用WHERE子句来指定更新记录的条
25、件。【例3-10】更新student表中id字段值为1的记录,将记录中的name字段的值更改为caocao, grade字段的值更改为50。在更新数据之前,首先使用查询语句查看id字段值为1的记录,执行结果如下所示:mysql SELECT * FROM student - WHERE id=1;+-+-+-+| id | name | grade |+-+-+-+| 1 | zhangsan | 98.5 |+-+-+-+1 row in set (0.00 sec)从查询结果可以看到,id字段值为1的记录只有一条,记录中name字段的值为zhangsan,grade字段的值为98.5。下面
26、使用UPDATE语句更新这条记录,SQL语句如下所示:UPDATE studentset name=caocao,grade=50WHERE id=1;上述SQL语句执行成功后,会将id为1的数据进行更新。为了验证数据是否更新成功,使用SELECT语句查看数据库student中id为1的记录,查询结果如下所示:mysql SELECT * FROM student - WHERE id=1;+-+-+-+| id | name | grade |+-+-+-+| 1 | caocao | 50 |+-+-+-+1 row in set (0.00 sec)从查询结果可以看到,id字段值为1的记
27、录发生了更新,记录中name字段的值变为caocao,grade字段的值变为50。如果表中有多条记录满足WHERE子句中的条件表达式,则满足条件的记录都会发生更新。【例3-11】更新student表中id字段值小于4的记录,将这些记录的grade字段值都更新为100。在更新数据前,首先使用查询语句查看id字段值小4的记录,执行结果如下所示:mysql SELECT * FROM student - WHERE id4;+-+-+-+| id | name | grade |+-+-+-+| 1 | caocao | 50 | 2 | lisi | 95 | 3 | wangwu | 61.5 |+-+-+-+3 rows in set (0.00 sec)从查看结果可以看到,id字段值小于4的记录一共有3条,它们的grade字段值各不相同。下面使用UPDATE语句更新这3条记录,UPDATE语句如下所示:UPDATE studentSET grade=100WHERE id SELECT * FROM student - WHERE id4;+-+-+-+| id | name | grade |+-+-+-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1