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. 子查询与连接查询嵌套:
        在这里插入图片描述

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

posted @ 2020-10-14 16:57  娜梓  阅读(418)  评论(0编辑  收藏  举报