关系型数据库
2016年5月19日
13:25
关系模型把世界看作是由实体和联系组成的。而关系型数据库是将数据库表做为实体, 以数据库表的主键和外键的关联关系描述的一种数据库结构。
一对一:一条主表记录对应一条从表记录,同时一条从表记录也对一条主表记录。
一对多:一条主表记录对应一条到多条从表记录,同时一条从表记录只对应一条主表记录
多对多:一条主表记录对应多条从表记录,同时一条从表记录对应多条主表记录
关心型数据库知识一个保存数据的容器,大多数数据库依靠一个称为数据库管理系统(Database ManagementSystem,简称DBMS)的软件来管理数据库中的数据。
SQL(Structured Query Language)
结构化查询语言,是一种用于管理关系型数据库,并与数据库中的数据进行通讯的计算机语言。
数据定义语言(DDL)创建、修改、删除数据的内部数据结构
数据查询语言(DQL)用于数据库中的查询
数据操作语言(DML)用于数据库中数据的修改,包括添加、删除、修改等
数据控制语言(DCL)控制数据访问权限。
PRIMARY KEY 定义当前列为主键。主键有两个特点,非空,不能重复。
AUTO_INCERMENT 设置当前列为自动增长列,由DBMS为该列分配值,确保该列的值不重复。
条件判断Caseshen
-- 条件判断
SELECT e.*,(CASE WHEN s_grade >= 90 THEN '大帅'
WHEN s_grade >=80 AND s_grade <90THEN '良帅'
WHEN s_grade >=60 AND s_grade <80THEN '中帅'
WHEN s_grade IS NULL THEN '缺考'
ELSE '母国平'
END
)'评价'FROM t_student1 e;
-- J122每个学生加2分 T120加5分
UPDATE t_student1SET s_grade = (CASE
WHENs_class = 'J122' THEN s_grade+1
WHENs_class = 'T120' THEN s_grade+5
ELSEs_grade
END
);
使用聚合函数进行统计汇总
COUNT |
统计行数量 |
SUM |
获取单个列合计值 |
AVG |
计算某个列的平均值 |
MAX |
计算列的最大值 |
MIN |
计算列的最小值 |
count(*)统计所有行,count(s_grade)统计某列所有非空的
HAVING和 WHERE区别
二者都是过滤条件,WHERE运行在分组前,因此不能执行任何聚合函数。
HAVING是运行在分组后,只能用做聚合函数的过滤。
SQL执行顺序
分组后的SQL执行顺序
第一步:执行FROM
第二部:WHERE条件过滤
第三步:GROUP BY分组
第四步:执行select投影列
第五步:HAVING条件过滤
第六步:执行ORDER BY排序
在分组查询中,能够查询的字段,只能是分组字段和聚合函数。
添加外键约束
-- 给学生表所在班级增加外键约束
ALTER TABLEt_student ADD CONSTRAINT ys1 FOREIGN KEY(st_class)
REFERENCESt_class(cl_id );
可靠性+完整性=数据完整
1.实体完整性
保证一行数据是有效的,能够完全代表它的实体。保证每行所爱表的实体能互相区别,不能存在两条一模一样的记录
主键约束,主键是列表中的一到多个列,主键列不能为空,也不能重复。一个表中只能有一个主键
唯一约束,是指给定列的所有值必须唯一,该列表在表中每一行的值必须唯一。它和主键约束的区别在于该列可以为空,
并且可以在一张表中给多个列设置唯一约束。
1.建表时加上唯一性约束
`username`varchar(18) NOT NULL unique,
2.给已经建好的表加上唯一性约束
ALTER TABLE `t_user`ADD unique(`username`);
2域完整性
保证一列数据是有效的
实现方法 非空约束:Not Null 默认约束:Default 检查约束:check(mysql不支持)
sex varchar(10) default '男' -- DEFAULT表示如果该列不插入值,则值为‘男’如果插入值则以插入为值
3引用完整性 保证引用的编号是有效的
两个表之间如果存在外键约束,那么删除主表记录时,由于外键约束存在,无法删除有从表记录引用的主表记录
1)级联删除,将主表记录对应的从表记录先做删除,再删除主表记录
DELETE FROM t_roomWHERE manId=1;
DELETE FROM t_manWHERE id = 1;
2)外键设空, 将主表记录对应的从表记录外键设置为null,再删除主表记录
UPDATE t_room SETmanId=NULL WHERE manId=2;
DELETE FROM t_manWHERE id=2;
外键是指从表的某列与主表的某列存在依附关系
外键越是是指在外键关联主键上强制加上一个约束,如果违反约束,则不允许该条数据的修改
没有外键约束不等于没有外键
4.用户自定义完整性 保证自定义规则
子查询
内联接 是指使用比较运算符根据每个表共有的列的值匹配两个表中的行。
外联接是指不管有没有匹配,被定义了外部联接的表数据都要出现在结果中。
什么是JDBC
Java DataBase Connectivity
是一种用于执行SQL语句的Java API,它是由Java语言编写的类和接口组成。是java连接数据库的一套规范,该规范中
定义了一系列的接口,由数据库厂商提供接口实现类,由开发者根据接口,调用实现类的方法。这样开发者就可以屏蔽
不同数据的差异,无论连接什么数据库,对数据做什么样的操作,都是一套API.
jdbc操作流程
1.加载驱动,建立连接 2.执行SQL语句 3关闭连接
dao模式: 建立实体类和数据库表做映射,也就是哪个表对应哪个类,哪个属性对应哪个列。
而jdbc操作的目的就是完成对象数据和关系数据的转换。
Statement和PreparedStatement的区别
1.Statement 是PreparedStatement 的父接口
2.Statement在执行SQL语句只能拼接字符串,由于每次值不一样在执行SQL语句时都会将SQL语句重新编译,效率较低。
而PreparedStatement 提供占位符方式设置值,SQL语句不用每次执行都进行编译,执行效率较高。
3.Statement在执行SQL语句时,由于采用拼接字符串方式设置值,所以容易造成SQL注入。而PreparedStatement使用
占位符方式,不论什么值都当字符串处理。不会造成SQL注入。
SQL注入:在执行SQL语句时,如果以拼接字符串方式设置值,那么如果在值中有SQL语句关键字或非法字符,
可能会造成执行结果不正确或执行失败的情况。