Mysql

Mysql
Pric外键约束
外键用来让两张表之间建立连接,从而保证数据的一致性和完整性
一对一
一对多在多的一方建立外键,指向一的一方的主键
多对多建立第三张中间表,包含两个外键,分别关联两方主键
语法
创建表的时候指定外键
外键名称 foreign key (外键字段名) references 主表(主表列名)
创建表后添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)
当外键形成后,就不能删除部门3了,因为有外键约束
外键约束删除更新行为
当设置外键更新删除行为为 cascade 时 我们删除部门3时,跟部门3关联的stu表中的dept_id为3的也会被删掉 !!!!
当设置外键更新删除行为为 set null 时,我们删除部门3时,跟部门3关联的stu表中的dept_id为3的会被删除为null
代码
-- 创建一对多的表 |
连接
事务的隔离级别
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| Read uncommitted | 有 | 有 | 有 |
| Read committed | 无 | 有 | 有 |
| Repeatable Read(默认) | 无 | 无 | 有 |
| Serializable | 无 | 无 | 无 |
事务隔离级别越高,数据越安全,但是性能越低
并发事务问题:
脏读:一个事务读取到另一个事务还没有提交的数据
不可重复读:一个事务先后读取一条数据,但是两次读取的数据不同
幻读:一个事务查询数据,没有对应的数据,然后再插入数据,却发现对应的数据已经存在
四大特性(ACID)
原子性 事务要么全部成功,要么全部失败
一致性 事务完成时,必须保持所有数据都一致状态
隔离性 保证事务不受外部并发操作影响的独立环境下运行
持久性 事务一旦提交或回滚,对数据的改变是永久的
mysql体系结构
连接层,服务层,引擎层,存储层
存储引擎 (表类型)
是存储数据,建立索引,更新/查询等技术的实现方式,是基于表的,而不是基于库的
mysql默认是innodb
DML(增删改语句)操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键
innodb逻辑存储结构
索引
索引index是帮助mysql高效获取数据的数据结构(有序)
二叉树?
索引结构
hash结构
索引分类
回表查询
先从二级索引找到对应的主键值
然后再到聚集索引中拿到行数据
sql性能分析
方式一 查看执行频次
方式二 慢日志查询
方式三 profile
方式4 explain
type类型 如果 是查询没有条件 就是all
如果查询的条件是唯一或者是主键,那么就是const
如果查询的条件不是唯一的,那么就是ref
索引使用
索引设计原则
sql优化
插入数据优化
主键优化
Order by优化
group by 优化
limit优化
count优化
update优化
mysql中的锁
当全局锁存在时,不能更新删除数 据,只能查询数据
表级锁
行级锁
主从复制
分库分表
读写分离
一主一从


























































































