zoukankan      html  css  js  c++  java
  • Mysql数据库(五大约束,三大范式),多表查询,子查询

    - 五大约束

    1. 主键约束 primary key
    2. 唯一约束 unique
    3. 默认约束 default
    4. 非空约束 null
    5. 外键约束 foreign key

    - 主键约束特点
    7. 唯一不重复
    8. 不能设置为 null
    9. 一张表里面只能存在一个主键
    10. 可以设置两个字段来设置主键(联合主键)

    - 主键约束的三种创建方式

    1.在创建表的时候设置主键

    creat table 表名(

        字段名 字段类型 primary key

    )

    create table 表名(

        字段1 字段类型1 字段2 字段类型2

        primary key (字段名1)

    )

    2.表创建完之后设置主键

    ALTER TABLE 表 ADD 名字 PRIMARY KEY(列名)



    注意:一张表里只能存在一个主键 一般是 id

    删除主键 : 因为表里只有一个主键 所以不用根据名称去删除

    ALTER TABLE p3 DROP PRIMARY KEY

    自增长策略: 关键字 auto_increment
    特点:

    1. 只能用于整形
    2. 一般在开发中用于给主键来设置
    3. 每次增长的波长为1 i++ 设置自增常就不用区关注这个字段 系统 默认来给其插入值

    - delete 与TRUNCATE TABLE 区别

    1. delete 是一条一条数据删除 效率低 不会删除表结构 只是删除数据,自增长id会接着之前的
    2. TRUNCATE TABLE 删除表结构 所有的数据全部删除 效率高 自增长id从零开始

    -唯一约束特点:(唯一 不能重复)

      1. 主键约束与唯一约束的区别 都唯一 都可以设置组合外键
      2. 一个表里只能存在一个主键 可以有多个唯一
      3. 主键约束不能设置为null 唯一约束可以为空
      4. 如果没有设置唯一约束的名称 系统就是 将列名设置为唯一约束的名称
      5. 创建表

    create table 表名(

    字段名 字段类型 unique

    )







    1. 创建表时:唯一约束也可以使用两个列名来设置

    alter table 表名 add constarint 名称 unique(列名)



    2. 删除

    alter table 表名 drop index 唯一约束设置名称



    - 非空约束

    1. 设置非null约束之后 插入的该列不能为空

    create table 表名( 字段名 字段类型 not null )



    2. 默认约束

    create table 表名( 字段名 字段类型 default )



    • 注意点:
    1. 设置默认值之后,插入数据不插入该字段 会自己插入默认值
    2. 插入的时候 如果直接写 DEFAULT 插入就是设置的默认
    3. 如果不想使用默认值 就需要手动来插入数据

    -外键约束

    1. 限制两个表的关系,从表的字段值引用了主表的某字段值
    2. 外键约束的关键字 foreign key
      前提:
      1. 一般是两张表示(多表)
      2. 两张表存在关系 一对一 一对 多 多对多关系
      3. 两张表 主表 (一) 老师表(tid int(4)) 从表(多) 学生表(tid int(4))

    注意事项:
    1.设置外键 一般是设置在从表(多)那边 学生表
    2.被引用的一般是对应主表的主键
    3.主表的主键 类型与长度必须与外键的类型长度一样

    1.创建两张表 :

    CREATE TABLE teacher(
      tid  INT(4) AUTO_INCREMENT PRIMARY KEY,
      tname VARCHAR(20)
    );
    CREATE TABLE teacher(
      Sid  INT(4) AUTO_INCREMENT PRIMARY KEY,
      Sname VARCHAR(20),
       tid  INT(4)
    );

    2. 添加外键

    alter table 表名 add coinstarint 外键的名字 foreign key(从表关联字段) 
    reference 主表(主键)

    3. 删除外键: 先删除外键 再删除外键索引
    alter table 表名 drop foreign key 外键的名称

    注意:
    增加数据 先增加主表 再增加从表
    删除数据 先删除从表 再删除主表

    总结:约束主要是用于对数据表中的字段来进行约束 保证数据表中的数据的完整性 与正确性

    - 三大范式

    • 第一大范式: 每一列都是最小的原子单位 不能进行再分割
    • 第二大范式:每一张表值描述一种事物 每一列 都与主键进行依赖
    • 第三大范式:在第二大范式的基础上 ,不能出现局部传递依赖
      总结: 所有列 只找主键进行依赖

    - 多表查询


    1. 非等值查询, 问题 :大量的数据冗余 所以基本上不使用
      select   列名1,列名2  from  表1,表名2
           SELECT  a.aid,a.aname,r.a_r_id  FROM   actor AS a,a_r  AS r  
      1. 等值查询: 在非等值查询语句后面 加上关联的条件 where a.aid =r.aid

      2. 连接查询
        内连接查询:关键 字 inner join on
        匹配规则: 取的是两张表交际
        在这里插入图片描述

      3. 左外连接 :关键字: left join on
        匹配的规则: 查询的时候 以 左表为基准 右表一一匹配 如果匹配上 正常显示
        如果匹配不上的 左表依赖显示 右边设置为null
        在这里插入图片描述

      4. 右外连接:关键字 right join on
        匹配规则 :查询的时候 已右表为基准 左表一一匹配 如果匹配上 正常显示
        如果匹配不上 右表依然显示 左表设置为null
        在这里插入图片描述

      -子查询

        1. 定义 :一个完整的查询语句 嵌套另一个完整的查询语句
          第一种形式: 把一个子查询的结果当做另一个子查询的条件来使用
          在这里插入图片描述

        2. 子查询与连接查询嵌套:
          在这里插入图片描述

          第二种子查询的方式: 把子查询查询出的结果当成列来进行显示:
          在这里插入图片描述

  • 相关阅读:
    Rabbitmq
    Python() with语法糖
    Python()-类的专有方法之双下划线方法
    git配置踩过的坑
    https 协议 和 ssh 协议在使用上的差别
    Definite dimensionality
    java中定义和声明的区别
    数据库中表的数据逻辑删除的方案
    StringBuffer、StringBuilder和String的区别?
    常量池中的String与堆中的String
  • 原文地址:https://www.cnblogs.com/nastu/p/13815838.html
Copyright © 2011-2022 走看看