表关系
一对多
在多的里面建立外键与其连接
建立外键 constraint 外键名称 foreign key 外键列名 reference 主表名 主表列名
多对多
要建立三张表 至少包含两外键 对应关键两方的主键
一对一
在任意一方建立外键 关联对方主键 并设置唯一
笛卡尔积 集合所有表组合的情况
清除笛卡尔积方式 添加条件 添加外键列名= 主表 列名 id
内连接 用左边表去匹配右边表记录 从表.外键=主表.主键
隐式内连接
select 字段名 from 左表名 ,右表名 where 条件
显示内连接
select 字段名 from 左表 inner join 右表 on条件
内连接 查询步骤
1 确定查询哪些表
2 确定表连接的条件
3 确定查询的条件
4确定查询的字段
左外连接
select 字段名 from左表 left join 右表 on 条件
用左表记录去匹配右表记录 如果符合条件显示 否则显示null 可以理解为在内连接基础上左表信息全部显示
右外连接
select 字段名 from 左表 right join 右表 on 条件
用右表的记录匹配左表的记录 如果符合条件显示 否则显示null 可以理解为在内连接基础上右表信息全部显示
子查询
一个查询的结果作为另一个查询的条件
有查询嵌套的称为子查询
子查询需要带括号
子查询结果是单行单列
select 查询字段 from 表名 where 字段=(子查询)
子查询结果是单列 多行
select 查询字段 from 表名 where 字段 in (子查询)
子查询结果是多行多列
select 查询字段 (子查询) from 表名 where 条件
事物
事物 在开发中 处理业务 里面的sql语句 必须同时成功 事物执行是一个整体 所有sql必须成功 只要有一条异常 所有sql语句都要回滚 整个业务失败
开启事物 start transaction
提交事物 commit
回滚事物 rollback
事物的四大特性
ACID
原子性(Atomicity) 每个事物都是一个整体 不可再分 要么同时执行成功 要么同时执行失败
一致性(Consistency) 事物在执行前后 数据库的状态保持一致 就好比转账 前后总金额必须保持一致
隔离性(Isolation) 事物与事物之间不应该互相影响 执行时保持隔离状态
持久性(Durability) 事物一旦执行成功 对数据库的修改是持久的 就算关机也是保存下来的
mysql数据库的四种隔离级别
1 读未提交 隔离级别 read uncommitted 脏读 不可重复读 读取到未提交的事物
2 读已提交 隔离级别 read committed 不可重复读 读已提交的事物
3 可重复读 隔离级别 repeatable read 可重复读
4 串行化 隔离级别 serializable
前三个都会出现幻读
一个事务中两次读取的数量不一致 要求在一个事务中 多次读取的数量是一致的 这是insert和delete引发的问题