## 1.关系型数据库——MySQL
MySQL属于关系型数据,本质就是若干个存储数据的二维表,关系数据库的表和表之间需要建立"一对多",“多对一"和"一对一”的关系,这样才能按照应用程序的逻辑来组织和存储数据。
一对多:一个表里的一行数据对应另一个表里的多行数据。
一对一:一个表里的一行数据对应另一个表里的一行数据。
表字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为null。
(注意null表示字段数据不存在。整型字段如果为null不表示它的值为o ,同样的,字符串型字段为null也不表示它的值为空字符串。)
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
在关系型数据库中,关系是通过主键和外键来维护的。
2.主键
主键:指能够通过某个字段唯一区分出不同的记录的字段为主键。
选取主键的基本原则:不使用任何业务相关的字段作为主键。
作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id。常见的可作为id字段的类型有:
- 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键。
- 全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。
对于大部分应用来说,通常自增类型的主键就能满足需求。除了INT类型还可以是 BIGINT NOT NULL AUTO_INCREMENT 类型。
如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。
3.外键
可以把数据与另一张表关联起来,这种列称为外键。
外键并不是通过列名实现的,而是通过定义外键约束实现的。
通过定义外键约束,关系数据库可以保证无法插入无效的数据。
外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。
要删除一个外键约束,通过ALTER TABLE实现的。
注意:删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN …实现的。