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语句与WHERE、ORDER、LIMIT子句的搭配,本文介绍;
另外,大家习惯将表格的列称作字段,从本文起将遵循这一习惯。
系列文章回顾:
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;
有几点需要注意一下:
- 对于增加列中的
[NOT NULL],添加上即表示本列的值不允许为NULL,此时将一条记录的该字段设置为NULL是不允许的; - 对于增加列中的
[DEFAULT val]表示默认值,当该字段设置为NOT NULL时此处则不可以采用DEFAULT NULL的描述了,否则如下图报错:

- 修改列中的
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, ...);
删除记录使用DELETE与WHERE子句组合实现:
# 删除全部记录
DELETE FROM tb_name;
# 条件删除使用WHERE子句
DELETE FROM tb_name WHERE col=val;
修改记录使用UPDATE与SET、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添加查看条件,并使用AND和OR对条件进行组合,用法如下:
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) |
-
多个条件使用
AND和OR组合时,组合优先级与C++一致,也可以使用()改变结合性。 -
通配符:
%匹配任意个字符,_只能匹配1个字符。 -
通配符
%不能匹配NULL; -
尽量不要使用通配符,因为这花费更多时间;
-
NULL判断较为特殊,需要采用IS NULL或IS 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 BY与LIMIT 1组合可轻松实现max或min函数;
# 提取表中价格最低的记录
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. 小结
本文的内容比较多一点,但好在思路还算清晰,现总结如下:
- 表格名称的修改采用
ALTER TABLE tb_name RENAME new_tb_name;; - 表格字段的修改:
ALTER TABLE与ADD、DROP、CHANGE、MODIFY进行组合实现; - 表格记录的增加:
INSERT INTO;删除:DELETE FROM; - 表格记录查询核心关键字为
SELECT,后可接字段名称以限定查询字段,提升效率; - 对
SELECT进行条件过滤使用WHERE子句,可组合各种条件,还可以用通配符,有%和_通配符,但通常不建议; - 对
SELECT结果排序使用ORDER BY子句,可以指定多个字段排序,并可使用DESC表示降序排序; - 对
SELECT结果截取可使用LIMIT子句,指定偏移offset和截取数量rowCount,不提供偏移时默认offset=0;
如有错误欢迎指正,共同进步~
今天你学废了吗?
本文深入讲解了MySQL中表格属性的修改,包括字段增删改和表名变更,以及记录的添加、删除、修改操作,同时涵盖了查询技巧如条件过滤、排序和结果截取。通过实例演示,掌握如何高效查询和管理数据库数据。

3256

被折叠的 条评论
为什么被折叠?



