MySQL(第三篇)—表中数据的基本操作

表中数据的基本操作

首先,先介绍一个从数据表中查询数据的一个语法
select 语句的 select * from 表名;
用来查询表中所有数据。
* ”是MySQL提供的通配符,可以代替所有的字段名。

为了检验每一次的操作是否成功,我多次使用了select * from 表名;

1、插入数据

(1)为所有列插入数据

- 指定所有字段名

语法格式

insert into 表名 (字段1,字段2,...) values (1,2,...);

需要注意的是,在这个格式中,字段1、字段2等等都是数据库中的字段名 称,值1、值2等等是对应字段需要添加的数据,每个值的顺序、类型必须与字段名对应。于是说,insert语句字段的顺序可以和数据库中表字段的顺序不一致,但是values中的值一定要与insert语句中字段的顺序对应。

示例

mysql> insert into stu(id,name,age)values(101,'baixiaobai',10);
Query OK, 1 row affected (0.01 sec)

查看一下

mysql> select * from stu;
+------+------------+------+
| id   | name       | age  |
+------+------------+------+
|  101 | baixiaobai |   10 |
+------+------------+------+
1 row in set (0.00 sec)

成功插入了

  • 不指定字段名

语法格式

insert into 表名 values (值1,2,...;

使用这种格式,值1、值2等等表示每个字段需要添加的数据,每个值的顺序和类型都必须和表中字段的顺序和类型都对应。
示例

mysql> insert into stu values (102,'lilei',18);
Query OK, 1 row affected (0.00 sec)

查看一下,同样,插入成功了

mysql> select * from stu;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|  102 | lilei |   18 |
+------+-------+------+
1 row in set (0.00 sec)

(2)为指定列插入数据

在使用的时候,大多数情况不需要全部字段添加数据,在表中可能只需要添加某几个字段的数据,其他字段使用默认值

insert into 表名 (字段名1,字段名2,...) values (1,2,...)

字段1、字段2等等表示数据表中的字段名称,也是你要插入数据的字段名称,值1、值2等等表示每个字段需要添加的数据,每个值的顺序和类型必须和字段名对应

mysql> insert into stu (name,age) values ('hanmeimei',19);
Query OK, 1 row affected (0.00 sec)

查看一下,在下表,可以看到,我在字段“name”“age”插入的数据成功输出了,没有插入的字段“id”输出了默认值

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
+------+-----------+------+
2 rows in set (0.00 sec)

(3)批量插入数据

  • 为所有列批量插入数据
insert into stu (字段名1,字段名2,...) values (1,2,...),(1,2,...);
mysql> insert into stu(id,name,age) values (103,'lihua',19),(104,'xiaohong',18);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看一下

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
|  103 | lihua     |   19 |
|  104 | xiaohong  |   18 |
+------+-----------+------+
4 rows in set (0.00 sec)

可以看到成功了,另外呢,在语法中字段名是可以省略的

insert into stu values (1,2,...),(1,2,...);

示例

mysql> insert into stu values (113,'liming',19),(114,'xiaolan',18);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看一下,依然成功了,

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   18 |
| NULL | hanmeimei |   19 |
|  103 | lihua     |   19 |
|  104 | xiaohong  |   18 |
|  113 | liming    |   19 |
|  114 | xiaolan   |   18 |
+------+-----------+------+
6 rows in set (0.00 sec)
  • 为指定列批量插入数据
insert into stu (字段名1,字段名2) values (1,2),(1,2);

2、更新(修改)数据

插入数据后,可能会遇到需要更改的情况,就需要更新数据表中的数据。
我们使用update语句来实现

语法格式

update 表名 set 字段名1=1 [,字段名2=2,...] [where 条件表达式]; 

写的有点复杂了,咱来一句一句的来看

(1)更新全部数据

在update语句中,不使用where条件语句,会把表中指定字段的所有数据全部更新。

update 表名 set 字段名1=1 [,字段名2=2,...]

这个格式呢,可以修改一个指定字段名的所有数据,或者修改多个指定字段名的所有数据。

修改一个指定字段名的所有数据,

update 表名 set 字段名1=1;

示例

mysql> update stu set age=20;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|  102 | lilei     |   20 |
| NULL | hanmeimei |   20 |
|  103 | lihua     |   20 |
|  104 | xiaohong  |   20 |
|  113 | liming    |   20 |
|  114 | xiaolan   |   20 |
+------+-----------+------+
6 rows in set (0.00 sec)

修改多个指定字段名的所有数据

update 表名 set 字段名1=1,字段名2=2;

示例

mysql> update stu set age=19,sex='nan';
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   19 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   19 | nan  |
+------+-----------+------+------+
6 rows in set (0.00 sec)

可以看到,修改成功了

ps:因为用来展示的字段数量不够,所以这个示例我先添加了一个‘sex’的字段

mysql> alter table stu add sex varchar(10);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | NULL |
| NULL | hanmeimei |   20 | NULL |
|  103 | lihua     |   20 | NULL |
|  104 | xiaohong  |   20 | NULL |
|  113 | liming    |   20 | NULL |
|  114 | xiaolan   |   20 | NULL |
+------+-----------+------+------+
6 rows in set (0.00 sec)

(2)更新部分数据

使用where子句指定更新数据的条件

update 表名 set 字段名1=1  where 条件表达式; 

示例,在name=‘xiaohong’ 的条件下成功更新age=20,如下图

mysql> update stu set age=20 where name='xiaohong';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   19 | nan  |
+------+-----------+------+------+
6 rows in set (0.00 sec)

当然都可以修改表中多个字符段的数据,比如说,我想让id=114的age字符段数据改为21,sex字符段数据改为nv,如下图

mysql> update stu set age=21,sex='nv' where id=114;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   19 | nan  |
| NULL | hanmeimei |   19 | nan  |
|  103 | lihua     |   19 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   19 | nan  |
|  114 | xiaolan   |   21 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

(3)使用简单的运算对数据进行修改

我们还可以通过一些简单的运算对数据进行修改
比如我们可以把所有人的年龄加1

mysql> update stu set age=age+1;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   21 | nan  |
|  113 | liming    |   20 | nan  |
|  114 | xiaolan   |   22 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

所有人age加1
我突然发现xiaohong还没有过生日,他的年龄仍然是20岁
我就可以通过where子句指定条件,把xiaohong的年龄减去1

mysql> update stu set age=age-1 where name='xiaohong';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

再来看

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   20 | nan  |
|  114 | xiaolan   |   22 | nv   |
+------+-----------+------+------+
6 rows in set (0.00 sec)

‘xiaohong’的年龄成功减1

3、删除数据

(1)使用delete删除数据

delete from 表名 [where 条件表达式];

1.删除全部数据

语法结构

delete from 表名;

示例

mysql> delete from stu;
Query OK, 5 rows affected (0.00 sec)

以上结果说明删除成功

mysql> select * from stu;
Empty set (0.00 sec)

以上结果说明,stu表中已经没有数据

2.删除部分数据

使用where子句指定删除数据的条件

语法结构

mysql> delete from stu where name='xiaolan';
Query OK, 1 row affected (0.00 sec)

可以看到,‘xiaolan’已经被排异了(战术伤心)

mysql> select * from stu;
+------+-----------+------+------+
| id   | name      | age  | sex  |
+------+-----------+------+------+
|  102 | lilei     |   20 | nan  |
| NULL | hanmeimei |   20 | nan  |
|  103 | lihua     |   20 | nan  |
|  104 | xiaohong  |   20 | nan  |
|  113 | liming    |   20 | nan  |
+------+-----------+------+------+
5 rows in set (0.00 sec)

(2)使用truncate删除数据

truncate table 表名;

示例

mysql> truncate table stu;
Query OK, 0 rows affected (0.05 sec)
mysql> select * from stu;
Empty set (0.00 sec)

可以看到,stu表的全部数据被成功删除

(3)delete语句和truncate语句的区别

  • delete既可以用于删除全部数据,也可以用于删除部分数据,truncate只能用于删除表中的全部数据
  • delete逐条删除,truncate整体删除,truncate效率高于delete
  • delete可以将删除的数据找回,truncate删除的数据无法找回
  • 使用truncate语句删除表中数据后,再次向表中添加记录时,自增字段默认值重置为1,而使用delete语句,自增字段的值为删除时该字段的最大值加1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章