SQL笔记02 - 关系模型

学习sql关系模型并总结, 来源廖雪峰教程

  • 表的每一行称为记录: 记录一个逻辑意义上的数据
  • 表的每一列称为字段: 同一个表的每一行, 都拥有相同的若干字段
  • 字段定义了数据类型(整型, 浮点型, 字符型, 日期)
  • 字段个定义了是否允许为NULL
    • NULL表示字段不存在
    • 字段应该避免允许NULL的数据
    • NULL可以简化查询条件, 加快查询速度, 利用读取数据后进行判断是否为NULL
  • 表和表之间应该建立"一对多", "多对一"的关系

主键

  • 一张表的每一行数据: 记录
  • 一条记录由多个字段组成
  • 每一条记录都包好若干个定义的好的字段
  • 同一个表的所有记录都有字段定义
  • 任意两条记录不能重复, 某个字段唯一区分不同的记录, 称为主键
  • 主键不能再修改
  • 不适用任何业务相关的字段作为主键
  • 主键类型:
    • 自增整数类型
    • 全局唯一GUID类型
  • INT自增类型, 记录数最多21亿, BIGINT自增类型最多922亿亿

联合主键

  • 允许通过多个字段唯一标识记录.
  • 两个或者更多的字段都设置为主键.
  • 尽量不使用联合主键, 复杂度的上升

外键

  • 通过某个字段, 把数据与另一张表关联起来: 外键
  • 外键并不是通过列名实现, 通过定义外键约束实现
  • 通过外键约束查询, 关系数据库可以保证插入无效数据
  • 外键约束, 会降低数据库性能

添加外键约束

mysql> ALTER TABLE students
    -> ADD CONSTRAINT fk_class_id
    -> FOREIGN KEY (class_id)
    -> REFERENCES classes (id);
  • ADD CONSTRAINT fk_class_id: 添加一个约束, 约束名称任意指定
  • FOREIGN KEY (class_id): 指定class_id作为外键
  • REFERENCES classes (id): 关联到classesid

删除约束

mysql> ALTER TABLE students
    -> DROP FOREIGN KEY fk_class_id;

多对多

  • 多对多是通过两个一对多实现的
  • 通过一个中间表

一对一

  • 一个表的记录对应到另一个表的唯一记录
  • 大的表格拆成两个表格, 经常读取和不经常读取的, 以获取更高的性能

索引

  • 索引: 对某一列或多个列的值进行预排序的数据结构

添加索引

mysql> ALTER TABLE students
    -> ADD INDEX index_score (score);
  • 索引可以有多列
mysql> ALTER TABLE students ADD INDEX index_name_score (name, score);
  • 索引的效率取决于索引的值是否离散. 大量重复的值, 效率并不高
  • 优点: 查询效率高
  • 缺点: 插入, 更新, 删除记录的速度变慢, 需要同时修改索引
  • 主键, 自动创建主键索引, 主键索引效率最高, 因为主键保证绝对唯一

唯一索引

  • 因为业务中含义的字段不宜用作主键

  • 又有些业务, 某个非主键字段不能重复, 例如身份证, 便给该列添加唯一索引

  • 添加唯一索引

mysql> ALTER TABLE students
    -> ADD UNIQUE INDEX uni_name (name);
  • 对某一列添加一个唯一约束, 而不创建索引
mysql> ALTER TABLE students ADD CONSTRAINT strain_uni_name  UNIQUE (name);
posted @ 2020-04-29 13:59  张润昊  阅读(293)  评论(0编辑  收藏  举报