• 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);
    
  • 相关阅读:
    安装xml2js出现npm ERR! code E404 npm ERR! 404 Not Found: event-stream@3.3.6
    ie的盒模型和标准模型
    vue-生命周期
    Vue2.5入门-2
    Vue2.5入门-1
    Vue2.5入门-3
    理解 ajax、fetch和axios
    sublime install package没反应,以及安装后没有出现install package选项
    6-创建官网
    numpy数组常用计算
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/12801798.html
Copyright © 2020-2023  润新知