数据库特训系列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的联结
  • 组合查询
  • 全文本搜索
  • 视图
  • 存储过程
  • 游标
  • 触发器
  • 事务处理
  • 全球化和本地化
  • 安全管理
  • 维护
  • 性能优化

每个都能扯一大堆..我们这一个月好好战一下好吧...

posted @ 2018-01-09 20:18  韧还  阅读(236)  评论(0编辑  收藏  举报