数据库特训系列1——基础拾遗
缘由
每天学习一段时间发现,琐琐碎碎的学习,对日常的工作帮助很大,避免了之前踩过的各种坑;
但,对于这些坑是如何形成的,深挖一会儿就不行了。
思考之下,发现,平时的所学如同学习如何填坑;
系统性的学习,才是,从断面看这个坑,时间跨度上看这个坑的形成和填上,也可以说,是升级我们的铲子;
那句话怎么说来着,手里有了锤子,看什么都是钉子;
所以,我们从基础开始;
之前也写过“必知必会”的读后感,长久不用,现在又需要再拾点东西了
最基础部分
几个问题想一下:
- 什么是数据库?
- 什么是sql?
- 什么是MySQL?
这个其实就是整个数据库最基础的地方,却总是让大神都能卡下壳的时候;
其实简单理解就好:
- 数据库就是数据的仓库,也就是存储数据的地方(软件?);
- sql,结构化查询语言,用于和数据库通信;
- MySQL是一种DBMS
是不是什么都看得懂,又什么都不懂,那就对了;
继续
- 数据库用于存储数据,存储那种可以具有逻辑关系的数据,在数据库中,所有数据被结构化描述;
- sql,是一种语言,语句简单但功能强大,用于和数据库通信,实现对数据库的各种操作,是给数据库下命令的方式;
- MySQL是一种DBMS,DBMS是数据库管理系统,通常就是我们说的数据库;
差不多了吧,那再具体一点,一些其他概念:
- 列:某一个字段,数据的一个特性;
- 行:特定某一条数据;
- 表:=列+行;数据的结构化清单;
- MySQL是属于基于客户机+服务器的,数据库操作实际发生在服务器,对客户透明;客户机可以是MySQL提供的工具(命令行工具),可以是各种语言:PHP,JAVA等(注意这里概念的理解)
- SHOW命令的使用:
SHOW DATABASES;
SHOW TABLES;
SHOW STATUS;
## 显示服务器状态
SHOW COLUMNS FORM table_name;
SHOW CREATE database;
SHOW CREATE table;
## 显示创建语句
SHOW WARNINGS;
SHOW ERRORS;
SHOW GRANTS;
## 显示授权用户
SELECT
SELECT是数据库中,最常用的操作了,我们重点说下这个,其他涉及到了的话具体补上;
DISTINCT
DISTINCT是不查到重复的行;
需要注意的是,其对多个列的,是要求每个都不一样的才行,对单一没问题,多个有问题,参考:
2.作用于多列
示例2.1
select distinct name, id from A
执行后结果如下:
实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持。
示例2.2
select distinct xing, ming from B
返回如下结果:
返回的结果为两行,这说明distinct并非是对xing和ming两列“字符串拼接”后再去重的,而是分别作用于了xing和ming列。
指定多个列排序
排序按照所规定的顺序;
比如,按照age,gender两列排序,会按照age先排,然后年龄相同的,再按照gender去排;
IN操作符
IN操作符的功能几乎和OR是一样的,但我们还是推荐使用IN
- 更直观;
- 易管理;
- IN一般比OR清单执行更快(注意条件)
- 更加适用于子查询情况下
通配符
一般情况下,一定不要放在起始位置,特别慢!!!
GROUP BY等
用到聚集类型的,请一定加上GROUP BY;
使用HAVING来过滤GROUP BY;
由此带来SELECT的顺序问题:
SELECT id,COUNT(count),name
FROM test_table
WHERE id > 100
GROUP BY name
HAVING COUNT(count) > 2
ORDER BY id DESC
LIMIT 100
联结
自联结 = 多个条件查询
自然联结,外部联结什么的好晕,打算留坑
可以开坑的地方
- sql中的正则表达式(正则表达式也该复习了。。。)
- sql的联结
- 组合查询
- 全文本搜索
- 视图
- 存储过程
- 游标
- 触发器
- 事务处理
- 全球化和本地化
- 安全管理
- 维护
- 性能优化
每个都能扯一大堆..我们这一个月好好战一下好吧...