数据库共有3种类型,为关系数据库、非关系型数据库和键值数据库。
这篇文章主要以mysql的关系数据库为基础。
关系型数据库的范式
- 第一范式(1NF)
- 定义:字段不可再分
数据库中的每一个字段都是最小单位,不可再被分割。
- 缺点:容易产生数据冗余; 修改数据库时可能造成数据异常;一个数据变动可能造成多处修改。
- 第二范式(2NF)
- 定义:在第一范式的基础上,要有 键(可以是多个字段) ,且所有字段必须完全依赖于建。
即,如果某个键不能完全确定其他值,那么就不是完全依赖。
- 第三范式(3NF)
-
定义:一个表中,不能有两层依赖,即A能确定B,B能确定C,即A间接依赖于C。第三范式不允许存在这种情况。
-
解决方法:分别建表。
- BC范式
- 定义:BC范式要求键中的属性也不能存在间接依赖。
JOIN 链接表
当存在多张表时,我们可以通过join将多个表连接起来,找到我们想要的数据。
select table1name.attr as xxx , table2name.attr as yyy
from table1 inner join table2
on table1中的内容 = table2中的内容
- inner join 表示 只显示两张表都有的属性
- left join 表示 保留左边那张表的NULL
- right join 表示 保留右边那张表的NULL
- full outer join 保证两边都显示
mysql 存储引擎
show engines;
常见的存储引擎:
- InnoDB——mysql默认,支持事务、遵循ACID、支持行锁和外键
- MyISMA——拥有较高的插入、查询速度,但不支持事务
- Memory——在内存中,能快速访问数据
- Archive——只支持insert和select
索引
通过索引,我们可以提高我们的搜索效率
ceate unique index index1 on tablename(attr(100));
show index in users;