MySQL学习(3)-表格的“改”和“查”


0. 前言

上一篇文章介绍了在MySQL服务器中,可以保存多个不同的数据库(DATABASE),而每个数据库可以保存多个不同的表(TABLE),以及如何去创建、删除数据库和表等内容。

对于码农而言,增删改查是较为耳熟能详的,上一篇介绍过MySQL中数据库的增删改查以及表的增删了,本文将针对表格的进行介绍。

再回顾一下,对于数据库(DATABASE)

#  增:
CREATE DATABASE db_name;

#  删:
DROP DATABASE db_name;

#  改:即对于表格的增删改,见下文;

#  查:
SHOW DATABASES; SHOW TABLES;

对于表(TABLE),注意需要使用USE tb_name;指定数据库:

#  增:
CREATE TABLE tb_name( col1 type1, col2 type2, ... );

#  删:
DROP TABLE tb_name;

:分为对表格字段的修改以及对表格记录的修改,本文介绍;

:主要为SELECT语句与WHEREORDERLIMIT子句的搭配,本文介绍;

另外,大家习惯将表格的称作字段,从本文起将遵循这一习惯。

系列文章回顾:
MySQL学习(1)-Windows环境安装和配置
MySQL学习(2)-基本概念、数据类型和简单语句


1. 表格属性修改

表格属性的修改分为字段的修改表名称的修改,全都使用ALTER关键字即可。

# 修改表名:
ALTER TABLE tb_name RENAME new_tb_name;

# 增加列:
ALTER TABLE tb_name ADD colName colType [NOT NULL] [DEFAULT val];

# 删除列:
ALTER TABLE tb_name DROP colName;

# 修改列:
ALTER TABLE tb_name CHANGE colName newColName newColType;

有几点需要注意一下:

  1. 对于增加列中的[NOT NULL],添加上即表示本列的值不允许为NULL,此时将一条记录的该字段设置为NULL是不允许的
  2. 对于增加列中的[DEFAULT val]表示默认值,当该字段设置为NOT NULL时此处则不可以采用DEFAULT NULL的描述了,否则如下图报错:
    在这里插入图片描述
  3. 修改列中的CHANGE关键字表示对于字段名称和类型等属性同时进行修改,若不修改字段名称,可以采用MODIFY
ALTER TABLE tb_name MODIFY colName colType [NOT NULL] [DEFAULT val]

2. 表格记录修改

似乎已经学了不少语句了,什么SHOW HELP ALTER CHANGE ADD DROP CREATE MODIFY之类的,但很遗憾地,稍微思考一下会发现:关于记录的一条都没有,而从使用角度来讲,更重要的内容应该是数据本身才对!

不过也不宜沮丧,如果把数据库比作一个书架,到目前为止已经学会怎么 搭书架(数据库) ,以及 给书架分区(表) 了,剩下就是把书放进去了。

2.1 添加、删除和修改

添加记录可以提供所有字段,也可以选择要提供的字段,使用INSERT INTO

# 插入数据记录,提供所有列的值
INSERT INTO tb_name VALUES (colVal1, colVal2, ...);

# 插入数据记录,但只提供某些列的值
INSERT INTO tb_name(col1, col2, ...) VALUES (val1, val2, ...);

删除记录使用DELETEWHERE子句组合实现:

# 删除全部记录
DELETE FROM tb_name;
# 条件删除使用WHERE子句
DELETE FROM tb_name WHERE col=val;

修改记录使用UPDATESET、WHERE等组合实现:

# 修改数据记录:
UPDATE tb_name SET col1=val1, col2=val2 WHERE col3=val3 AND col4=val4;

关于WHERE子句的使用参考本文2.2.2条件过滤

2.2 查看

查看数据的核心语句为SELECT

# 查看表所有数据
SELECT * FROM tb_name;

# 查看特定列
SELECT colName1, colName2,... FROM tb_name;

如果只能查看所有记录那就太笨重了,MySQL可以通过各种手段实现重复过滤、条件过滤、排序、截取等,以下一一击破。

2.2.1 重复过滤

查看去重数据:在SELECT后添加DISTINCT,用法如下:

# 查看所有列都不一样的记录
SELECT DISTINCT * FROM tb_name;

# 查看col1和col2均不重复的记录
SELECT DISTINCT col1, col2 FROM tb_name;

DISTINCT与后面的列捆绑记忆更好:SELECT的是DISTINCT的列;或者说DISTINCT总是将SELECT返回结果去重

2.2.2 条件过滤

可以使用WHERE添加查看条件,并使用ANDOR对条件进行组合,用法如下:

SELECT * FROM tb_name WHERE col1=xx AND col2!=xx OR col3>xx;
  • 支持的运算符如下表所示:
运算符描述
=等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在两个值之间,闭区间,如col NOT BTWEEN val1 AND val2
LIKE模式查找,如 col NOT LIKE '%abc',匹配以’abc’为后缀的子串
IN当col值在某个集合中,如IN (val1, val2, val3)
  • 多个条件使用ANDOR组合时,组合优先级与C++一致,也可以使用()改变结合性。

  • 通配符:%匹配任意个字符,_只能匹配1个字符。

  • 通配符%不能匹配NULL

  • 尽量不要使用通配符,因为这花费更多时间

  • NULL判断较为特殊,需要采用IS NULLIS NOT NULL进行判断。

采用=NULL不会报错,但是结果不正确,如下图:
在这里插入图片描述

可以对条件取反,在条件前添加NOT即可:

SELECT * FROM tb_name WHERE NOT col=val;

2.2.3 结果排序

使用 ORDER BY对查询结果排序

SELECT * FROM tb_name ORDER BY col1 [DESC], col2 [DESC], ... ;
  • 加上DESC表示降序排列,不加时默认为ASC升序排列;
  • 未使用ORDER BY子句时,返回的记录顺序无意义,且不一定为插入顺序
  • 多列排序:按某一列排序后仍可能有重复元素,可再按另一列排序;
  • 要是所有列都排序了还有重复元素怎么办?别忘了刚才的 SELECT DISTINCT

2.2.4 结果截取

使用 LIMIT [offset,] rowCount 对查询结果进行截取

# 将返回结果从第offset条记录开始,截取rowCount条;
# offset不写时默认从第1条记录开始,即offset=0
SELECT * FROM tb_name LIMIT [offset,] rowCount;

ORDER BYLIMIT 1组合可轻松实现maxmin函数;

# 提取表中价格最低的记录 
SELECT * FROM tb_name ORDER BY price LIMIT 1;

对于SELECT语句的基本用法介绍得差不多了,稍作总结如下:

  • SELECT语句可以用DISTINCT修饰,以去除重复数据;
  • SELECT语句可以添加上可选的WHERE子句ORDER BY子句、LIMIT子句,依次用于条件过滤、结果排序、结果截取
  • 各成分的调用顺序如图:
SELECT [DISTINCT] * FROM tb_name [WHERE子句] [ORDER BY子句] [LIMIT子句];

3. 小结

本文的内容比较多一点,但好在思路还算清晰,现总结如下:

  1. 表格名称的修改采用ALTER TABLE tb_name RENAME new_tb_name;
  2. 表格字段的修改ALTER TABLEADD、DROP、CHANGE、MODIFY进行组合实现;
  3. 表格记录的增加INSERT INTO删除DELETE FROM
  4. 表格记录查询核心关键字为SELECT,后可接字段名称以限定查询字段,提升效率;
  5. SELECT进行条件过滤使用WHERE子句,可组合各种条件,还可以用通配符,有%_通配符,但通常不建议
  6. SELECT结果排序使用ORDER BY子句,可以指定多个字段排序,并可使用DESC表示降序排序;
  7. SELECT结果截取可使用LIMIT子句,指定偏移offset和截取数量rowCount,不提供偏移时默认offset=0

如有错误欢迎指正,共同进步~


今天你学废了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值