Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。本文将简单介绍Mysql的一些知识。
-
NoSql(相对于传统关系型数据库)
- 不需要预定义模式、无共享框架、弹性可扩展、分区、异步复制
- BASE特性,即相对于SQL数据库的ACID特性,NoSQL数据库牺牲一致性换取高可用性
- ACID : 是数据库事务正确执行的四个基本要素的缩写,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
NoSql使用场景:
数据模式简单、对灵活性要求更强的IT系统、对数据库性能要求比较高、不需要高度的数据一致性、对于给定Key,比较容易映射负责制的环境
MySQL
- MySQL(关系数据库) 特点:
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
每一行称为“记录”或“元组”
每一列成为“字段”或“属性”
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
外键(Foreign Key)表示了两个关系表之间的相关联系
好处:保持数据一致性,完整性,外键只能引用外表中的列的值或使用空值
设置外键约束禁用:SET FOREIGN_KEY_CHECKS = 0
设置外键约束启用:SET FOREIGN_KEY_CHECKS = 1
什么时候需要禁用外键约束呢?
当我们要迁移一整个数据库的时候,当你执行一个插入一句的时候,如果这个表有外键存在,数据库会先去检查这个外键是否存在,如不存在,则插入失败;实际的环境中数据库往往具有大量的表,我们无法保证我们执行插入操作的时候该表的外键已经在数据库里了,但我们知道它肯定会插到这个数据库里,但是我们先插入了一个引用了这个外键的表就会出现插入失败的情况,所以我们为了避免这个情况的发生,我们可以先暂时地禁用外键约束,等待所有数据都插入完毕后再打开外键约束。
完整性约束:
实体完整性约束:主属性不能为空且是唯一值
参照完整性约束:关系中不允许引用不存在的实体
用户自定义完整性约束:针对某一具体的关系(例:成绩字段只能取1~100)
- 视图(view)的几个优点:
- 安全
- 简化查询
- 自定义数据结构
- 独立逻辑数据
常用语句:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
设计数据库的步骤:
- 确定所有的实体集合
- 选择实体集合应包含的属性
- 确定实体集之间的联系
- 确定实体集的关键字,用下划线在属性上标明关键字的属性组合
- 确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n来表示联系的类型
级联操作:(cascade)
级联删除、级联更新
设置级联操作可以保证数据完整性,但级联关系会使得数据变的不可控
不建议使用级联关系 !!!
范式:
为满足不同数据库设计要求,减少数据冗余而制定的设计规范,可称为数据库范式。
数据库范式呈递次规范,即高阶范式必然满足低阶范式。
越高的数据库范式意味着越严格的沙滩车要求,同时数据库冗余越小。
第一范式(1NF):是对属性的原子性约束,要求属性具有原子性,不可再分解
数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值第二范式(2NF):要求实体的属性完全依赖于主关键字(针对联合主键的表)
通常:把一个多对多关系拆分成两个一对多关系第三范式(3NF):要求一个关系中不包含在其他关系已包含的非主关键字信息
所有非主关键字必须完全依赖主关键字
还有BCNF、第四范式和第五范式,本文不做讨论。
范式越高,数据的冗余度越小。其实没有冗余的数据库设计是可以做到的。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。一般来说,一个数据库设计符合3NF就可以了。