[MySQL学习笔记] 4.简单的增删改查

时间: | 分类: MySQL笔记

如果使用windows的cmd,需要告诉mysql切换客户端编码为gbk

set names gbk;

insert into <tablename> (字段1,字段2) values ('数据1','数据2');

还是以学生表为例,表有如下字段:

mysql> desc student;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name  | char(10)            | NO   |     |         |       |
| sex   | tinyint(3) unsigned | NO   |     | 0       |       |
| age   | tinyint(3) unsigned | NO   |     | 0       |       |
+-------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

我们需要插入一条学生数据(张三,男,16岁),性别栏如果使用char(1)存储男女,查询时速度没有int高,且当出现新的性别(伪娘,无性别,f*ta) 时将会无法存储,所以在数据库中,直接使用数字进行存储,由查询者自行转换。
定义男为0,女为1.

mysql> insert into student (name,sex,age) values ('张三',0,16);
Query OK, 1 row affected (0.02 sec)

mysql> select * from student; #显示表的所有数据
+------+-----+-----+
| name | sex | age |
+------+-----+-----+
| 张三 |   0 |  16 |
+------+-----+-----+
1 row in set (0.00 sec)

于是数据就被成功插入进去了。
但是来了一个新学生档案,不知道他的年龄是多少,可以这样输入:

#指定只插入name列和sex列。
mysql> insert into student (name,sex) values ('李四',1);
Query OK, 1 row affected (0.02 sec)

mysql> select * from student;
+------+-----+-----+
| name | sex | age |
+------+-----+-----+
| 张三 |   0 |  16 |
| 李四 |   1 |   0 |
+------+-----+-----+
2 rows in set (0.00 sec)

可以通过设置列字段来选择需要插入的数据。
但是如果列字段太多,每次插入也很啰嗦,可以这样简化

mysql> insert into student values ('美绘瑠',0,14);
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+--------+-----+-----+
| name   | sex | age |
+--------+-----+-----+
| 张三   |   0 |  16 |
| 李四   |   1 |   0 |
| 美绘瑠 |   0 |  14 |
+--------+-----+-----+
3 rows in set (0.00 sec)

也就是,当提供的数据顺序和数量完全符合列字段时,可以省略指定列字段,直接插入。
既如果有(id,姓名,年龄,生日)字段,则只要提供的参数是(2,王五,19岁,1999-06-30)这样的就可以直接插入进去。

当输入了上面的数据后发现输错了,我家的美绘瑠是萌妹不是猛男呀qwq
meru.png

那么我们可以删除这一行,重新插入。

delete from <表名> where <条件表达式>

警告:删除操作非常危险,请小心使用。
如果没有where,将会删除表中所有数据!

执行这条语句后,将会删除满足条件表达式的行。
为了避免误删,我们可以将delete替换为select验证where表达式是否有误。

#指定性别为0(男性)的用户
mysql> select * from student where sex=0;
+--------+-----+-----+
| name   | sex | age |
+--------+-----+-----+
| 张三   |   0 |  16 |
| 美绘瑠 |   0 |  14 |
+--------+-----+-----+
2 rows in set (0.00 sec)

如果使用了delete,将会删除这两行,我们要的是删除 name=美绘瑠 的行

mysql> delete from student where name='美绘瑠';
Query OK, 1 row affected (0.06 sec)

mysql> select * from student;
+------+-----+-----+
| name | sex | age |
+------+-----+-----+
| 张三 |   0 |  16 |
| 李四 |   1 |   0 |
+------+-----+-----+
2 rows in set (0.00 sec)

如果数据库中存在了两个张三

mysql> select * from student;
+------+-----+-----+
| name | sex | age |
+------+-----+-----+
| 张三 |   0 |  16 |
| 李四 |   1 |   0 |
| 张三 |   1 |  14 |
+------+-----+-----+
3 rows in set (0.00 sec)

我们需要删除性别为女的张三,可以使用 and 连接条件表达式,仅当所有的条件表达式为true时才会选中行
例如:where name=张三 and sex=1,选择名字为张三,且性别为女(1)的行

mysql> select * from student where name='张三' and sex=1;
+------+-----+-----+
| name | sex | age |
+------+-----+-----+
| 张三 |   1 |  14 |
+------+-----+-----+
1 row in set (0.00 sec)

删库 (跑路)

drop database <库名>;

删除表:

# drop table <表名>;

注意:此操作无法恢复,请慎重使用该命令。

虽然当输入错误时,可以删除重新插入,但是由于一个字段错而删除一整行效率极低,所以我们可以使用update进行修改

update <表名> set <列字段> where <条件表达式>

注意:如果不指定where,将会修改表中所有set的字段

mysql> select * from student;
+--------+-----+-----+
| name   | sex | age |
+--------+-----+-----+
| 李四   |   1 |   0 |
| 张三   |   0 |  16 |
| 美绘瑠 |   0 |  14 |
+--------+-----+-----+
3 rows in set (0.00 sec)

#设置列的性别字段为1,姓名为美绘瑠的行
mysql> update student set sex=1 where name='美绘瑠';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student;
+--------+-----+-----+
| name   | sex | age |
+--------+-----+-----+
| 李四   |   1 |   0 |
| 张三   |   0 |  16 |
| 美绘瑠 |   1 |  14 |
+--------+-----+-----+
3 rows in set (0.00 sec)

select 列字段 from 表名 where 条件表达式

列出表中所有数据,则可以用*代替列字段。

列出表中所有性别为女的用户

mysql> select * from student where sex=1;
+--------+-----+-----+
| name   | sex | age |
+--------+-----+-----+
| 李四   |   1 |   0 |
| 美绘瑠 |   1 |  14 |
+--------+-----+-----+
2 rows in set (0.00 sec)

如果只需要部分列,则使用:

#指定sex列和age列,用逗号分隔
mysql> select sex,age from student ;
+-----+-----+
| sex | age |
+-----+-----+
|   1 |   0 |
|   0 |  16 |
|   1 |  14 |
+-----+-----+
3 rows in set (0.00 sec)



白咲美绘瑠's blog