多表设计
一对多
关系实现:在数据库表中多的一方添加字段来关联一的一方的主键
外键约束
一对一
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提高操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
多对多
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
多表查询
从多张表中查询数据
-
连接查询
-
内连接:查询A、B交集部分数据
-
外连接
-
左外连接:查询左表所有数据(包括两张表交集部分数据)
-
右外连接:查询右表所有数据(包括两张表交集部分数据)
-
-
-
子查询
事务
一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败
注意:默认MYSQL事务是自动提交的,也就是说,当执行一条DML语句,MYSQL会立即隐式的提交事务
事务控制
-
开启事务:start transaction;/begin;
-
提交事务:commit;
-
回滚事务:rollback;
四大特性
-
原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败
-
一致性:事务完成时,必须使所有的数据都保持一致状态
-
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
-
持久性:事务一旦提交或回滚,它对数据库中的数据的改变是永久的
索引
是帮助数据库高效获取数据的数据结构
优缺点
优点
-
提高数据查询的效率,降低数据库的IO成本
-
通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗
缺点:
-
索引会占用存储空间
-
索引大大提高了查询效率,同时也降低了insert update delete的效率
结构
MYSQL数据库支持的索引很多,如 Hash B+Tree Full-Text 索引等,如果没有特别指明,都指默认的B+Tree结构组织的索引
-
B+Tree(多路平衡搜索树)
语法
-
创建索引:create [unique] index 索引名 on 表名 (字段名,...)
-
查看索引:show index from 表名;
-
删除索引:drop index 索引名 on 表名;
注意:
-
主键字段,建表时,会自动创建主键索引
-
添加唯一约束时,数据库实际会添加唯一索引
MyBatis
一款优秀的持久层框架,用于简化JDBC的开发
JDBC
使用Java语言操作关系型数据库的一套API
-
sun公司官方定义的一套操作所有关系型数据库的规范,即接口
-
各个数据库厂商去实现这套接口,提供数据库驱动jar包
-
我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类
数据库连接池
-
是个容器,负责分配、管理数据库连接
-
他允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
-
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
优势:
-
资源重用
-
提升系统响应速度
-
避免数据库连接遗漏
标准接口:DataSource
-
官方提供的数据库连接池接口,由第三方组织实现此接口
-
功能:获取连接 Connection getConnection() throws SQLException;
-
常见产品:
-
Druid(德鲁伊)
-
是阿里巴巴开源的数据库连接池项目
-
功能强大,性能优秀,是Java最好的数据库连接池之一
-