MySQL 从零开始:04 表的增删改查

在上一小节中介绍了 MySQL 数据库的一些最最最基础的入门级也是必须要掌握的10条语句,本节将继续深入学习 MySQL 的增删改查语句。本节讲的增删改查是相对于而言的。

1、准备工作

想要对表进行增删改查,首先应该有张表,假设我们要统计大学同学工作之后的工作情况,建立了如下表格:

姓名

性别

公司

工资

准备工作:

mysql> create database salarydb;
Query OK, 1 row affected (0.01 sec)

mysql> use salarydb;
Database changed
mysql> create table class(
    -> id int primary key auto_increment,
    -> name varchar(10) not null default '',
    -> gender char(1) not null default '',
    -> company varchar(20) not null default '',
    -> salary decimal(6,2) not null default 0.00
    -> )engine myisam charset utf8;
Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show tables;
+--------------------+
| Tables_in_salarydb |
+--------------------+
| class              |
+--------------------+
1 row in set (0.00 sec)

mysql> desc class;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| name    | varchar(10)  | NO   |     |         |                |
| gender  | char(1)      | NO   |     |         |                |
| company | varchar(20)  | NO   |     |         |                |
| salary  | decimal(6,2) | NO   |     | 0.00    |                |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

执行结果:

01.准备工作

此处建立了一个表,但是不要困惑于建表语句里面的数据类型等,后续会详细讲解。

表创建完成之后要设置一下 数据库的字符集,因为我们要使用到中文:

set names gbk;

02.设置字符集

2、insert 增加数据

MySQL 通过 INSERT INTO SQL语句来插入数据,其语法为:

# 插入一行
insert into tablename (field1, field2, ..., fieldN)
                    values
                    (value1, value2, ..., valueN);

# 插入多行
insert into tablename (field1, field2, ..., fieldN)
                    values
                    (value1, value2, ..., valueN),
                    (value1, value2, ..., valueN),
                    ...
                    (value1, value2, ..., valueN);

如果数据是字符型,必须使用单引号或者双引号,如:"张三"。

2.1 添加所有列的数据

下面向该表中添加几条数据:

mysql> insert into class (id,name,gender,company,salary)
    -> values (1,'张三','男','网易',9367.84);

一定要记住每个数据段或者字段后面加个空格,比如上面指令第一行最后要加上一个空格。

03.插入一条数据

另外如果我们要添加所有列的数据可以使用如下语法:

insert into tablename VALUES
                    (value1, value2, ..., valueN);

例如:

mysql> insert into class
    -> values (2,'李四','男','百度',8987.63);

执行结果:

04.插入数据省略列名

2.2 添加部分列

有时候我们不需要添加所有列的数据,比如 司徒小翠 在一个保密机构工作,其公司名称和薪水都不能透露,我们可以使用如下语句插入数据:

mysql> insert into class (name,gender)
    -> values ('司徒小翠','女');

执行结果:

05.插入数据部分列

本条记录省略了 id、company和salary 字段,因为id 设置为了自增,所以为3,company 与 salary 都设置了默认值,由于插入时没有指定值,所以就使用了默认值。

2.3 一次插入多条数据

为了省事,我们可以一次性插入多条数据:

mysql> insert into class (name,gender,company,salary)
    -> values
    -> ('石中玉','男','腾讯',7878.32),
    -> ('石中坚','男','腾讯',8234.17);

执行结果:

06.插入数据多条记录

3、delete 删除记录

要从表中删除数据,请使用MySQL delete语句。下面说明了delete语句的语法:

delete from table_name
where condition;

此处的删除是指删除表中的一条记录,也就是一行数据。

现在把 张三 的记录删掉,为什么呢?因为他的工资最高。

mysql> delete from class
    -> where salary>9000;

此语句以薪水作为条件,下面以 姓名 作为筛选条件删除 李四 的记录:

mysql> delete from class
    -> where name='李四';

执行结果:

07.删除数据

当然,where 后面的条件可以叠加,例如:

mysql> delete from class
    -> where salary>9000 and gender='男';

如果你看了上一节的教程,应该记住了这条语句:

delete * from tablename;

它实现的功能是删除表中的所有记录。

4、update 更新记录

我们使用update语句来更新表中的现有数据。也可以使用update语句来更改表中单个行,一组行或所有行的列值,其语法如下:

update table_name set 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
where
    condition;

在上面update语句中:

  • 首先,在update关键字后面指定要更新数据的表名。
  • 其次,set子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。以字面值,表达式或子查询的形式在每列的赋值中来提供要设置的值。
  • 第三,使用 where 子句中的条件指定要更新的行。where 子句是可选的。 如果省略where子句,则update语句将更新表中的所有行。

石中玉 在腾讯工作了一年后跳槽到了 阿里巴巴,其工资也涨到了 9999.99,使用以下语句更新该条记录:

mysql> update class set
    -> company='阿里',
    -> salary=9999.99
    -> where name='石中玉';

执行结果:

08.更新数据

注:一定要填写 where 后面的 condition,否则整个表的该列都会被修改。

5、select 查询记录

使用select语句从表或视图获取数据。表由行和列组成,我们往往只想看到子集行,列的子集或两者的组合。select语句的结果称为结果集,它是行列表,每行由相同数量的列组成。

select语句控制要查看哪些行和列,其基本语法为:

select 
    column_name1, column_name2, ...
from
    tablename
where
    conditions

5.1 查询所有行所有列

delete * from tablename; 中的 * 一样,select 也可以和其结合:

mysql> select * from class;

执行结果:

09.查询所有行所有列

5.2 查询指定行的所有列

mysql> select * from class
    -> where id>3;

执行结果:

10.查询指定行的所有列

5.3 查询所有行的指定列

mysql> select id,name,salary from class;

执行结果:

11.查询所有行的指定列

5.4 查询指定行的指定列

mysql> select id,name,salary from class
    -> where id>3;

执行结果:

12.查询指定行的指定列

至此数据库的增删改查的基本语法都已介绍了,当然增删改查还有高级的用法,以后有机会讲到。

最后再次强调:一定要记住每个数据段或者字段后面加个空格,尤其是多行语句时每行末尾不要丢掉空格。

原文发布于微信公众号 - C与Python实战(CPythonPractice)

原文发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏james大数据架构

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

22170
来自专栏禅林阆苑

mysql学习总结03 — 列属性(字段属性)

mysql中的6个列属性:null,default,comment,primary key,unique key,auto_increment

21720
来自专栏jouypub

MySQL查询语句优化

在项目中经常和MySQL数据库打交道,写过各种各样的SQL,也遇到过各种问题,针对遇到的各种场景,记录一些解决方案,主要是MySQL索引问题。

20010
来自专栏数据和云

让SQL成为一种生活方式:认识分页查询

? 1分页查询的书写方式 分页的目的就是控制输出结果集大小,将结果尽快的返回。 Oracle的分页查询语句有两种基本格式。第一种格式如下: ? 上面给出的这个...

32560
来自专栏数据和云

性能优化之查询转换 - 子查询类

作者简介 ? 韩锋 精通包括Oracle、MySQL、informix等多种关系型数据库,有丰富的数据库架构设计开发经验。就职于宜信。 子查询,是SQL中常...

30150
来自专栏数据和云

执行计划:Oracle的Profile特性与SQL执行计划的稳定性

编辑手记:在Oracle数据库中,版本变化带来的一大挑战就是SQL执行计划的稳定性,为此Oracle经历了从Outline到Profile的特性演进,本文带大家...

38290
来自专栏Java进阶架构师

「mysql优化专题」你们要的多表查询优化来啦!请查收(4)

相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根...

12620
来自专栏光变

MySQL编程规范

13310
来自专栏数据和云

SQL优化之道 - 或许你不知道的10条SQL技巧

一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 n...

66150
来自专栏乐百川的学习频道

使用 pymysql 操作MySQL数据库

安装PyMySQL PyMySQL是一个Python编写的MySQL驱动程序,让我们可以用Python语言操作MySQL数据库。 首先,使用pip安装PyMyS...

39550

扫码关注云+社区

领取腾讯云代金券