山东建设发展研究院网站,天健oa管理系统,网站什么时候恢复彩色,网络推广心得体会目录 多表设计
一对多#xff08;多对一#xff09;
多对多
一对一
多表查询
概述#xff1a;
内连接#xff1a;
外连接#xff1a;
子查询#xff1a;
分类#xff1a;
事务
索引
介绍#xff1a;
结构#xff1a;
语法#xff1a; 多表设计
概述多对一
多对多
一对一
多表查询
概述
内连接
外连接
子查询
分类
事务
索引
介绍
结构
语法 多表设计
概述项目开发中在进行数据库表设计时会根据需求及业务模块之间的关系分析并设计表结构由于业务之间相互关联所以各个表结构之间也存在着各种联系基本上分为三种
一对多多对一
例如部门和员工的关系一个部门可以有多个员工
在一对多的关系中我们把一的一方称作父表多的一方称为子表
多表问题分析
现象当父表数据被直接删除子表部分数据依然归属于父表此时就出现了数据不完整不一致的问题
问题分析目前上述的两张表在数据库层面并未建立关联所以是无法保证数据的一致性和完整性的。
解决方式数据库中的约束外键
后续添加外键时需要将之间删除的数据补充完整否则会出现报错数据不完整
在外键约束后不能删除父表中的在子表中存在引用的外键
外键约束
物理外键
概念使用 foreign key 定义外键关联另外一张表。
缺点 影响增、删、改的效率需要检查外键关系。 仅用于单节点数据库不适用于分布式、集群场景。 容易引发数据库死锁问题消耗性能。
逻辑外键
概念:在业务层逻辑中解决外键关联。
通过逻辑外键就可以很方便的解决上述问题。 多对多
案例学生 与 课程 的关系
关系一个学生可以选修多门课程一门课程也可以供多个学生选择 实现建立第三张中间表中间表至少包含两个外键分别关联两方主键 一对一
案例用户 与 身份证信息 的关系
关系一对一关系多用于单表拆分将一张表的基础字段放在一张表中其他字段放在另一张表中以提升操作效率一张表存放查询频率多的
实现在任意一方加入外键关联宁外一方的主键并且设置外键为唯一的UNIQUE 多表查询
介绍
多表查询指从多张表中查询数据。
select*from tb_emp,tb_det; from后为表名用逗号分开但是这个查询的结果为笛卡尔集
select*from tb_emp,tb_det where tb_emp.dept_id,tb_det.id 这样可以将无效的笛卡尔集消除。
概述
分类
连接查询
内连接相当于查询A、B交集部分数据
外连接
左外连接查询左表所有数据包括两张表交集部分数据
右外连接查询右表所有数据包括两张表交集部分数据
子查询
内连接
语法
隐式内连接select 字段列表 from 表1表2 where 条件...
显式内连接select 字段列表 from 表1 [inner] join 表2 on 连接条件...;
起别名
select e.name,d.name from tb_emp e, tb_dept d where e.dept_idd.id;
一旦起别名查询只能用别名指定
外连接
语法
左外连接select 字段列表 from 表1 left [outer] join 表2 on 连接条件...;
select e.name,d.name from tb_emp e left tb_dept d on e.dept_idd.id;
右外连接select 字段列表 from 表1right [outer] join 表2 on连接条件...;
select e.name,d.name from tb_emp e right tb_dept d on e.dept_idd.id;
子查询
介绍SQL语句中嵌套select语句称为嵌套查询又称子查询。
形式select*from t1 where column1(select column1 from t2...);
子查询外部的语句可以是insert/update/delete/select的任何一个最常见的是select
分类
标量子查询
子查询返回的结果为单个值数字、字符串、日期等最简单的形式
常用的操作符 列子查询
子查询返回的结果为一列可以是多行
常用的操作符in、not in等 行子查询
子查询返回的结果为一行可以是多列
常用的操作符、、in、not in 表子查询
子查询返回的结果为多行多列常作为临时表
常用操作符in 事务
概念事务是一组操作的集合它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作 要么同时成功要么同时失败。
注意事项默认MySQL的事务是自动提交的也就是说当执行一条DML语句MySQL会立即隐式的提交事务。
事务控制
开启事务start transaction/begin
提交事务commit
回滚事务rollback 四大特性
原子性事务是不可分割的最小单元要么全部成功要么全部失败
一致性 事务完成时必须使所有的数据都保持一致状态
隔离性数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行
持久性事务一旦提交或回滚它对数据库中的数据的改变就是永久的 索引
介绍
索引是帮助数据库 高效获取数据 的 数据结构。
优点
提高数据库查询的效率降低数据库的IO成本
通过索引列对数据进行排序降低数据排序的成本降低CPU消耗。
缺点
索引会占用存储空间。
索引大大提高了查询效率同时却也降低了insert、update、delete的效率。 结构
MySQL数据库支持的索引结构有很多如Hash索引、Full-Text索引等。我们平常所说的索引如果没有特别指明都是指默认的BTree结构组织的索引。 语法
创建索引
create[unique]index 索引名on表名字段名,...);
查看索引
show index from 表名
删除索引
drop index 索引名 on 表名
注意事项
主键字段在建表时会自动创建主键索引。
添加唯一约束时数据库实际上会添加唯一索引。