首先,先介绍一个从数据表中查询数据的一个语法
select 语句的 select * from 表名;
用来查询表中所有数据。
“ *
”是MySQL提供的通配符,可以代替所有的字段名。
为了检验每一次的操作是否成功,我多次使用了select * from 表名;
- 指定所有字段名
语法格式
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)
在使用的时候,大多数情况不需要全部字段添加数据,在表中可能只需要添加某几个字段的数据,其他字段使用默认值
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)
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);
插入数据后,可能会遇到需要更改的情况,就需要更新数据表中的数据。
我们使用update语句来实现
语法格式
update 表名 set 字段名1=值1 [,字段名2=值2,...] [where 条件表达式];
写的有点复杂了,咱来一句一句的来看
在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)
使用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)
我们还可以通过一些简单的运算对数据进行修改
比如我们可以把所有人的年龄加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
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)
truncate table 表名;
示例
mysql> truncate table stu;
Query OK, 0 rows affected (0.05 sec)
mysql> select * from stu;
Empty set (0.00 sec)
可以看到,stu表的全部数据被成功删除