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 i++ 设置自增常就不用区关注这个字段 系统 默认来给其插入值
- delete 与TRUNCATE TABLE 区别
- delete 是一条一条数据删除 效率低 不会删除表结构 只是删除数据,自增长id会接着之前的
- TRUNCATE TABLE 删除表结构 所有的数据全部删除 效率高 自增长id从零开始
-唯一约束特点:(唯一 不能重复)
- 主键约束与唯一约束的区别 都唯一 都可以设置组合外键
- 一个表里只能存在一个主键 可以有多个唯一
- 主键约束不能设置为null 唯一约束可以为空
- 如果没有设置唯一约束的名称 系统就是 将列名设置为唯一约束的名称
- 创建表
create table 表名( 字段名 字段类型 unique ) |
1. 创建表时:唯一约束也可以使用两个列名来设置
alter table 表名 add constarint 名称 unique(列名) |
2. 删除
alter table 表名 drop index 唯一约束设置名称 |
- 非空约束
1. 设置非null约束之后 插入的该列不能为空
create table 表名( 字段名 字段类型 not null ) |
2. 默认约束
create table 表名( 字段名 字段类型 default ) |
- 注意点:
- 设置默认值之后,插入数据不插入该字段 会自己插入默认值
- 插入的时候 如果直接写 DEFAULT 插入就是设置的默认
- 如果不想使用默认值 就需要手动来插入数据
-外键约束
- 限制两个表的关系,从表的字段值引用了主表的某字段值
- 外键约束的关键字 foreign key
前提:- 一般是两张表示(多表)
- 两张表存在关系 一对一 一对 多 多对多关系
- 两张表 主表 (一) 老师表(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 外键的名称
注意:
增加数据 先增加主表 再增加从表
删除数据 先删除从表 再删除主表
总结:约束主要是用于对数据表中的字段来进行约束 保证数据表中的数据的完整性 与正确性
- 三大范式
- 第一大范式: 每一列都是最小的原子单位 不能进行再分割
- 第二大范式:每一张表值描述一种事物 每一列 都与主键进行依赖
- 第三大范式:在第二大范式的基础上 ,不能出现局部传递依赖
总结: 所有列 只找主键进行依赖
- 多表查询
非等值查询, 问题 :大量的数据冗余 所以基本上不使用
select 列名1,列名2 from 表1,表名2 SELECT a.aid,a.aname,r.a_r_id FROM actor AS a,a_r AS r
-
等值查询: 在非等值查询语句后面 加上关联的条件 where a.aid =r.aid
-
连接查询
内连接查询:关键 字 inner join on
匹配规则: 取的是两张表交际 -
左外连接 :关键字: left join on
匹配的规则: 查询的时候 以 左表为基准 右表一一匹配 如果匹配上 正常显示
如果匹配不上的 左表依赖显示 右边设置为null -
右外连接:关键字 right join on
匹配规则 :查询的时候 已右表为基准 左表一一匹配 如果匹配上 正常显示
如果匹配不上 右表依然显示 左表设置为null
-子查询
-
定义 :一个完整的查询语句 嵌套另一个完整的查询语句
第一种形式: 把一个子查询的结果当做另一个子查询的条件来使用 -
子查询与连接查询嵌套:
第二种子查询的方式: 把子查询查询出的结果当成列来进行显示:
-