MySQL 各种连接

准备工作

MySQL 版本:10.1.29-MariaDB-6+b1

建表 SQL:

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `a_table` (
`a_id` int(11) DEFAULT NULL,
`a_name` varchar(10) DEFAULT NULL,
`a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `b_table` (
`b_id` int(11) DEFAULT NULL,
`b_name` varchar(10) DEFAULT NULL,
`b_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Read more

Redis、Memcached

共同点

Memcached 和 Redis 都很类似:都是内存型数据库,数据保存在内存中,通过 TCP 直接存取,速度快,并发高,但数据类型有限,查询功能不强,一般用作缓存。

Read more

MySQL 大表优化方案

前言

当 MySQL 单表记录数过大时,增删改查性能都会急剧下降,可以参考以下优化手段:

  • 单表优化
  • 读写分离
  • 缓存
  • 拆分
  • NoSQL
Read more

是否有必要建外键

前言

最近做项目,是在已有数据库基础上写业务,然后发现了很多本是外键的字段并没有设置外键约束。因为之前都是按照规范建数据表,所以对此有点奇怪,然后在网上找到了比较好的回答。

观点对比

大家共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省了其它的工作。

矛盾焦点:数据库设计是否需要外键。这里有两个问题:如何保证数据库数据的完整性和一致性;在第一条的基础上对性能的影响。

Read more

数据库

Mysql

数据库三范式

第一范式(1NF)

无重复的列:数据库表的每一列都是不可分割的基本数据项,同一列中不能同时有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。

举例1:一张学生表Student(stuNo,stuName,age,age,sex)是不符合第一范式的,因为有重复列age属性。去除重复列age以后的Student(stuNo,stuName,age,sex)是符合第一范式的。

第二范式(2NF)

属性完全依赖于主键【消除部分子函数依赖】:数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是属性完全依赖于主键。

这里说的主关键字可能不只有一个,有些情况下是存在联合主键的,就是主键有多个属性。

第三范式(3NF)

属性不依赖于其它非主属性【消除传递依赖】:一个数据库表中不包含已在其它表中已包含的非主关键字信息。

Read more