MySQL数据的完整性、一致性

范式理论 - 设计二维表的指导思想

  1. 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。
  2. 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。
  3. 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。

数据的完整性

  1. 实体完整性 — 每个实体都是独一无二的

    • 主键(primary key)
    • 唯一约束(unique)
    • 唯一索引
  2. 参照完整性(引用完整性)— 关系中不允许引用不存在的实体

    • 外键(foreign key)
  3. 域完整性 — 数据是有效的

    • 数据类型及长度
    • 非空约束(not null)
    • 默认值约束 ( default )
    • 检查约束(check)MySQL不支持

数据一致性

1. 事务
  • 事务:一系列对数据库进行读/写的操作,这些操作要么全都成功,要么全都失败。

  • 事务的ACID特性:

    • 原子性:事务作为一个整体被执行,对数据库的操作要么全部执行,要么全部不执行。
    • 一致性:数据库的状态应该与操作前后的状态保持数据的一致性。
    • 隔离性:多个事务并发执行时,每一个事务的执行都不会影响另一个事务。
    • 持久性:已经被提交的事务,应该被永久的保存在数据库中。
  • MySQL中事务的操作

    • begin / start transaction :开启事务环境

    • commit :提交事务,只有begin到commit之间的所有sql都执行成功,才会执行commit,否则执行rollback

    • rollback :事务回滚,放弃begin到commit之间执行成功的所有sql语句的结果

       示例:
           begin;
           insert into tb_dept values (1001, '游戏部', '成都');
           insert into tb_dept values (1001, '游戏部2', '成都2');
           commit;
           rollback;
       通过例子可以得出,当在执行插入第二条数据的时候发生错误,执行了rollback,尽管第一条语句没有问题但是因为第二条数据出错执行了rollback,所以本次的所有执行将会被退回。
      

#####2.索引

  • 字段的索引就相当于目录,添加索引可以大大提高查询的效率

  • 两个很大的缺点:1. 会消耗额外的存储空间

    ​ 2.会让增删改数据的效率降低,因为增加了更新索引的时间

  • 索引不能滥用,当项目中的某个字段的查询很频繁时,应考虑添加一个对应的索引。

    创建索引:create index <索引名称> on 表明 (字段名);
    删除索引:alter table 表名 drop index <索引名称;
    explain 描述,说明 -- 用来查看SQL语句的执行计划(执行效率),主要看type和rows的值
    
    例如:
    create index index_ename on tb_emp (ename);
    explain select * from tb_emp where ename='张三丰';
    

你可能感兴趣的:(数据库文档)