范式理论 - 设计二维表的指导思想
- 第一范式:数据表的每个列的值域都是由原子值组成的,不能够再分割。
- 第二范式:数据表里的所有数据都要和该数据表的键(主键与候选键)有完全依赖关系。
- 第三范式:所有非键属性都只和候选键有相关性,也就是说非键属性之间应该是独立无关的。
数据的完整性
实体完整性 — 每个实体都是独一无二的
- 主键(primary key)
- 唯一约束(unique)
- 唯一索引
参照完整性(引用完整性)— 关系中不允许引用不存在的实体
- 外键(foreign key)
域完整性 — 数据是有效的
- 数据类型及长度
- 非空约束(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='张三丰';
版权声明:本文为HuangXiongjin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。