优点 : (1)性能卓越服务稳定,很少异常宕机
(2)开放源代码无版权限制,自主性强,使用成本低
(3)社区比较活跃,问题可以比较快在社区解决
(4)支持多种操作系统,提供多种API接口,基本上可以兼容市面上大部分的编程语言。
缺点:
(1) 安全系统,复杂而非标准,只有调用mysqladmin来重读用户权限才会发生改变。
(2)MySQL不允许调试储存过程,开发和维护存储比较困难。
(3)MySQL不支持热备份
应用程序通过接口(例如Java中的ODBC , JDBC)来连接MySQL,最先处理的就是连接层。连接层包括通信协议,线程处理,用户密码认证三部分。
是MySQL的核心,主要包括权限判断,查询缓存,解析器,预处理,查询优化器,缓存和执行计划。
Pluggable Starage Enginess属于储存核心层。MySQL独有的,主要负责MySQL中数据的储存和提取。
文件储存层主要是将数据库中的数据存储在操作系统的文件系统上,并完成与储存引擎的交互。
E-R图是设计数据库的工具之一,用于构建数据库的概念模型。实体,属性和关系是设计数据库的基本要素。
(1)实体:实体是指现实世界中客观存在并可以相互区分的对象或实物。
(2)属性: 就是实体的特征。
(3)关系:两个实体或更多实体之间的对应关系。分为一对一,一对多,多对一,多对多。
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。
一共有六大范式,我们四,五,六在实际开发中,、很少用,所以我们主要了解一下前三大范式。
第一范式(1NF):用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。
第二范式(2NF):在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该表满足第二范式。
第三范式(3NF):在第二范式的基础上更进一层,第三范式是确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。
(1)select语句的完整语法:
- SELECT
- DISTINCT<select_list>
- FROM<left_table>
- <join_type> JOIN <right_table>
- ON <join_condition>
- WHERE <where_condition>
- GRUOP BY <group_by_list>
- HAVING <having_conidtion>
- ORDER BY <order_by_condition>
- LIMIT <limit_number>
-
-
- -- 其执行顺序如下:
-
- FROM
- <表名> # 笛卡尔积
- ON
- <筛选条件> # 对笛卡尔积的虚表进行筛选
-
- JOIN <JOIN,LEFT JOIN,RIGHT JOIN...>
- <JOIN表> # 指定JOIN,用于添加数据到ON之后的虚表中,例如LEFT JOIN会将左表的剩余数据添加到虚表中
-
- WHERE
- <WHERE条件> # 对上述虚表进行筛选
-
- GROUP BY
- <分组条件> # 分组
- <SUM()等聚合函数> # 用于HAVING子句进行判断,在书写上这类聚合函数是写在HAVING判断里面的
-
- HAVING
- <分组筛选> # 对分组后的结果进行聚合筛选
-
- SELECT
- <返回数据列表> # 返回的单列必须在GROUP BY子句中,聚合函数除外
-
- DISTINCT
- # 数据除重
-
- ORDER BY
- <排序条件> # 排序
-
- LIMIT
- <行数限制>
(2)需要注意的几点: