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![在这里插入图片描述]() 
 - -子查询 - 
定义 :一个完整的查询语句 嵌套另一个完整的查询语句 
 第一种形式: 把一个子查询的结果当做另一个子查询的条件来使用![在这里插入图片描述]() 
- 
子查询与连接查询嵌套: ![在这里插入图片描述]() 第二种子查询的方式: 把子查询查询出的结果当成列来进行显示: ![在这里插入图片描述]() 
 
- 
 
                    
                






 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号