一、聚合函数
count:统计行数量
sum:获取单个列的合计值
avg:计算某个列的平均值
max:计算列的最大值
min:计算列的最小值
二、having和where区别
二者都是过滤条件,where运行在分组之前,因此不能执行任何聚合函数,having是运行在分组后,只能用作聚合函数的过滤。
三、为什么要保证数据库完整性
为了防止垃圾数据的产生,从而影响数据库的执行效率
四、SQL语句执行顺序
1.执行from
2.where条件过滤
3.group by 分组
4.select 投影列
5.having条件过滤
6.执行order by顺序
五、外键与外键约束
外键是指从表的某列与主表的某列存在依附关系。外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改。没有外键约束不等于没有外键。
添加外键约束的语句:Alter table 从表 add constraint 外键名 foreign key(外键) reference 主表名(主键)
六、JDBC(Java Database Connection)
是java连接数据库的一套规范,该规范中定义了一系列接口,这些接口由数据库厂商根据自身数据库 的特点提供实现类,由用户根据接口调用实现类相关的方法。这样用户可以屏蔽不同数据库的差异,无论连接什么数据库都是一套API
七、DAO模式
建立实体类和数据库表做映射,也就是那个类对应哪个表,哪个属性对应哪个列。而jdbc操作的目的,就是完成对象数据和关系数据的转换。
八、DAO操作流程
1.加载驱动,建立连接(Class.forName + DriverManager.Connection)
2.执行SQL语句(PrepareStatement)
3.关闭连接(ps.close() con.close())
九、Statement和PreparedStatement的区别
1.Statement是PreparedStatement的父接口,他们都是sql语句执行的接口。
2.Statement在执行sql语句时,由于sql语句的数据由用户提供,所以只能用拼接字符串的方式将数据库加入sql语句。执行效率低,而且会引起sql注入。
3.PreparedStatement支持占位符的方式天聪数据,无论是什么值都只会编译一次,效率较高。而且无论值是什么,都会当字符串处理,不会引起sql注入
sql注入:如果执行sql语句采用拼接字符串的方式进行,那么一旦数据库中含有非法字符,或者sql语句的关键字时,会导致sql语句执行结果不正确或执行失败的情况。
十、三层架构
1.持久层:完成数据库相关操作
采用DAO模式,建立实体类和数据库做映射,也就是说那个表对应哪个类,哪个列对应哪个属性。而持久层的目的就是完成对象数据和关系数据的转换。
2.业务层:完成处理从表现层中得到的数据,和相关的业务操作
采用实物脚本模式,将当前业务中所有的操作封装成一个方法,保证这些操作同时成功或同时失败。不允许出现部分成功或部分失败,这样引起数据混乱的操作。
3.表现层:完成数据的战士和数据的收集
采用VMC模式
M(Model):模式。也就是实体类,用于封装和传输数据
V:(View):视图。也就是GUI窗体,用于数据库的战士。
C:(Contral):控制。也就是时间,用于控制业务流程。
层与层之间采用接口做耦合,这样当其中一个层的组件需要更换不会影响其他层的组件。
十一、
当两个表之间,建立了主外键约束时,删除主表记录时,如果该记录有从表记录引用,那么忧郁有外键约束存在,会报错,无法删除。解决方法:
1.将从表中引用该主键的记录全部删除,然后再删除主表记录
2.将从表中引用该主键的记录外键全部设置为null,然后再删除主表记录