#关系型数据库管理系统
关系型数据库: 关系模型把世界看作是实体和联系组成的,而关系型数据库是将数据库表作为实体, 以数据库表的主键和外键的关联关系描述联系的一种数据库结构。
关系的分类:
一对一:一条主表记录对应一条从表记录,同时一条从表记录也对应一条主表记录; eg:一个公民对应一个身份证号
一对多:一条主表记录对应多条从表记录,同时,一条从表记录只对应一条主表记录;eg:一个公民对应多套房
多对多:一条主表记录对应多条从表记录,同时一条从表记录也对应多条从表记录 eg;一个学生对应多个老师,一个老师对应多个学生
什么是关系型数据库
关系型数据库是一个保存数据的容器,大多数数据库依靠一个数据库管理系统(DBMS)的软件来管理数据库中的数据
什么是SQL: 结构化查询语言的缩写,是一种用于管理关系型数据库,并与数据库中的数据进行通讯的计算机语言
SQL语句:
数据定义语言(DDL)创建。修改。删除数据库的内部数据结构
数据查询语言(DQL)用于数据库中数据的查询
数据操作语言(DML)用于数据库中数据的修改,包括增修改
数据控制语言(DCL)控制数据访问权限
## ##MYSQL的数据类型
----------
整型:int
浮点型:float,double,decimal(10,2) 10,代表有效位数,2代表小数位数
字符型:varchar(20)
日期型:date
创建表
----------
PRIMARY KEY 定义当前列为主键,主键有两个特点,非空和不能重复
AUTO_INCREMENT 设置当前列为自动增长列,由DBMS为该列分配值,确保该列的值不重复
## 删除数据 ##
1 使用DELETE删除 不加WHERE条件的DELETE语句就是删除所有数据
2 使用TRUNCATE 语句
格式:TRUNCATE TABLE 表名
二者的区别
DELETE会记录日志,即删除后的数据可以恢复,但效率低,TRUNCATE删除后的数据不能恢复
### 聚合函数 ###
聚合函数的分类:
COUNT:统计行数量
SUM :获取单个列的合计值
AVG :计算某个列的平均值
MAX: 计算某个列的最大值
MIN: 计算列的最小值
## 数据分组 ##
HAVING 和 WHERE的区别
二者都是过滤条件, WHERE运行在分组前,因此不能执行任何聚合函数;
HAVING是运行在分组后,只能用作聚合函数的过滤
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
## SQL执行语句 ##
SQL执行顺序
第一步: 执行FROM
第二步: WHERE条件过滤T
第三步: GROUP BY 分组
第四步: 执行SELECT投影列
第五步:HAVING条件过滤
第六步: 执行ORDER BY 排序
###注意 :在分组查询中,能够查询的字段只能是分组字段和聚合函数
## 数据库完整性概述 ##
数据库完整性的概念 :数据的完整性和准确性
----------
数据库完整性的分类
1 实体完整性 保证一行数据是有效的
2 域完整性 保证一列数据是有效的
3 引用完整性 保证引用的编号是有效的
4 用户自定义完整性 保证自定义规则
----------
为什么要保证实体完整性 : 保证每行所代表的实体相互区别, 不能存在 两条一模一样的记录
实现方法
- 主键约束(PriMary Key)主键是表中的一到多个列,主键不能为空, 也不能重复, 一个表中只能有一个主键
- 唯一约束(Unique)
- 唯一约束指给定列的所有值必须唯一,
----------
域完整性: 是指定列的输入有效性
实现方法 非空约束 :Not Null
默认约束: Default
检查约束MYSQL不支持
eg: CREATE TABLE t_man{
id INT PRIMARY KEY AUTO_INCREMENT,
manName VARCHAR(20) NOT NULL,-- 表示该列必须添加值,不能为NULL
sex VARCHAR(10) DEFAULT '男'-- 表示该列如果不插入值,则以‘男’为准, 有插入值则以插入值为准
};
为什么要保证数据库完整性?
为了防止垃圾数据的产生,从而影响数据库的执行效率
----------
两个表之间如果存在外键约束,删除主表记录时, 由于有外键约束存在,无法删除有从表记录引用的主表记录
这时, 删除主表记录有两种方式:
1 级联删除:将主表记录对应的从表记录先删除, 再删除主表记录
eg:DELET FROM t_room WHERE mainId = 1;
DELET FROM t_man WHERE mainId = 1;
2外键设空:将主表记录对应的从表记录外键设置为null,再删除主表记录
eg:UPDATE t_romm SET mainId = NULL WHERE manId = 2;
DELETE FROM t_man WHERE id = 1;
----------
***** 外键与外键约束的区别
外键是指从表的某列与主表的某列存在依附关系,
外键约束是指在外键关联主键上强制加上一个约束,违反该约束,则不允许该条数据修改
没有建立外键约束不等于没有外键
##子查询 ##
为什么要使用子查询?
## 内联接 ##
内联接是指使用比较运算符根据每个表共有的列的值匹配两个表中的行
内联接的标准语法是 INNER JOIN
# 外联接 #
外联接是指不管有没有匹配, 被定义了外联接的表数据都要出现在结果中
分类
左外联接,右外联接,全外联接
# JDBC概述 #(
*****************十分重要
Java DataBase Connectivity
什么是JDBC :是一种用于执行SQL语句的Java API,由一组用Java语言编写的类和接口组成
JDBC是Java连接数据库的一套规范,该规范中定义来了一系列的接口,由数据库厂商提供接口实现类,由开发者根据接口,调用实现类的方法。这样开发者就可以屏蔽不同数据库的差异无论连接什么数据库,对数据库做什么样的操作,都是一套API。
JDBC 操作步骤:
1 加载驱动 建立连接(完成内存数据和磁盘数据的转换)
2 执行SQL语句
3 关闭连接
## dao 模式 ##
dao 模式: 建立实体类和数据库表做映射, 也就是哪个表对应哪个类,哪个属性对应哪个列,而JDBC操作的目的就是完成对象数据和关系数据的转换
Statement 和 PreparedStatement的区别
前者是后者的父接口
前者在执行SQL语句时,只能以拼接字符串方式设置值,由于每次值都不一样,所以在执行SQL语句时,都会将SQL语句重新编译,效率较低,二 后者提供占位符的方式设置值,SQL语句不用每次都进行编译,执行效率较高
前者在执行SQL语句时, 由于采用拼接字符串方式设置值,所以容易造成SQL注入,而后者使用占位符方式设置值,无论是什么值都不会造成SQL注入。
SQL注入 : 在执行SQL语句时,如果以拼接字符串方式设置值,那么如果在值中有SQL语句的关键字或非法字符,可能会造成执行结果不正确或执行失败的情况,这就叫SQL注入
# 开闭原则 #
开闭原则:软件实体应该面向修改关闭,面向扩展开放,其实现核心就是抽象,就是将相同的代码抽象出来,便于代码重用,这就是闭。将不同的代码也抽象出来,便于功能的扩展,这就是开。
# 三层架构 #
三层架构:表示层、业务层、持久层
持久层:完成数据库相关操作,采用DAO模式,建立实体类和数据库进行映射,也就是哪个类对应哪个表,哪个属性对应哪个列,而持久层的目的就是完成关系数据和对象的转换。
业务层 :完成业务处理。采用事务脚本模式。将一个业务中所有的业务操作封装成一个方法,保证该方法中所有数据库更新操作同时成功,或同时失败。
表现层 :完成数据的展示,采用MVC模式。
M:模型,也就是实体类,完成数据的封装和数据的传输
V :视图,也就是GUI窗体,完成数据的展示
C :控制,也就是事件,完成业务方法的调用和业务流程的控制
层与层之间,采用接口作耦合,这样当其中一个层的组件发生更改或者替换时,不会影响别的层的组件的使用。