SQL知识

来源:互联网 发布:js获取用户ip地址 编辑:程序博客网 时间:2024/05/24 03:23

关系型数据库

  • 关系模型是吧世界看做是由实体和联系组成的,而关系型数据库是将数据库表作为实体,以数据库表的主键和外键的关联关系描述联系的一种数据库结构

关系分三种:

  1. 一对一:一条主表记录对应一条从表记录,同时一条从表记录也对应一条主表记录。

  2. 一对多:一条主表记录对应多条从表记录,同时,一个从表记录只对应一个主表记录。

  3. 多对多:一条主表记录对应多条从表记录,同时,一个从表记录对应对条主表记录。(相对其他二个多了个中间表)

数据库管理系统

  • 关系数据库知识一个保存数据的容器,大多数数据依靠一个称谓数据库管理系统(Database Management System,简称DBMS)的软件来管理数据库中的数据。

  • 系统性数据库称为关系型数据库管理系统(Relational Database Mangement System,简称RDBMS)

结构化查询语言SQL:是Structured Query Language的缩写是一种管理关系型数据库,并与数据库中的数据进行通讯的计算机语言。

分类:

  1. 数据定义语言(DDL),创建修改删除数据的内部数据结构

  2. 数据查询语言(DQL),用于数据库中数据的查询

  3. 数据操作语言(DML),用于数据库中数据的修改,包括添加,删除,修改等

  4. 数据控制语言(DCL),控制数据库访问权限。

mysql的数据类型:

  1. 整形:int

  2. 浮点型:float , double, decimal(10,2)

  3. 字符型:varchar(20)

  4. 日期类型:date

PRIMARY KEY:定义当前列为主键,主键有二个特点,非空和不能重复。 AUTO_INCREMENT 设置为当前列为自动增长列,由DBMS为该列分配值,确保该列的值不重复。

  • 条件判断 Case when:

  • 删除数据用 -delete (不加where条件的能删除所有数据)和 truncate(直接删除所有数据):delete会记录日志,意味着删除后的数据还可以恢复,但效率极低,truncate不会记录日志,删除后的数据不能恢复,但是效率高。

聚合函数 的分类:

  • count :统计行数量

  • sum :获取单个列的合计值

  • AVG: 计算某个列的平均值

  • max:计算列的最大值

  • min :计算列的最小值

having 和 where区别:二者都是过滤条件,where运行在分组之前,因此不能执行任何聚合函数,having是在运行分组之后,只能用做聚合函数的过滤。

SQL 的执行顺序:

  1. 第一步:执行from,

  2. 第二步:where条件过滤

  3. 第三步:group by分组

  4. 第四步:执行select 投影列

  5. 第五步:having 条件过滤

  6. 第六步:执行order by 排序

在分组查询中,能够查询的字段只能是分组的字段和聚合函数

可靠性+准确性= 数据完整

数据完整型的分类:

1. 实体完整性:保证一行数据有效的

  • 为什么要保证实体完整性:保证每行所代表的实体能互相去呗,不能存在两条一模一样的记录,主键列不能为空,也不能重复,一个表中只能有一个主键。

  • 唯一约束是指给定列的所有值必须唯一,该列在表中每一行的值必须唯一,他和主键约束的区别在于该列可以为空,标签可以在一张表中给多个列设置唯一约束

2.域完整性:保证一列数据是有效的,是指列的输入有效性

3.实现方法:非空约束(Not NULL),默认约束(Default),检查约束(Check)(mysql不支持)

4.引用完整性:保证引用的编号是有效的

5.用户自定义完整性:保证自定义规则。

两个表之间如果存在外键约束,那么删除主表记录,由于有外键约束的存在,无法删除有从表记录引用的主表方法。

这时,删除主表记录有两种方式:

1,级联删除,将主表记录对应的从表记录先做删除,在删除主表记录

DELETE FROM t_romm WHERE manid=1;DELETE FROM t_man WHERE id=1;

2.外键设空,将主表记录对应的从标记录外键设置为null,在删除主表记录

UPDATE t_room SET manid =NULL where manid=2;DELETE FROM t_man WHERE id =2;

外键与外键约束的区别:

  • 外键:是指从表的某列与主表的某列存在依附关系。

  • 外键约束:是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改

  • 注意:没有建立外键约束不等于没有外键

联接

内联接是指使用比较运算符根据每个表共有的列的指匹配两个表中的行, 标准语法是 join

外联接是指不管有没有匹配的,被定义了外联接的表数据都要出现在结果中,

分类:左外联接,用法left outer join 或left join 右外联接,用法right outer join或 right join 全外联接,不支持

JDBC---Java DataBase Connectivity---是一种用于执行SQL语句的Java API,他由一组用Java语言编写的类和接口组成。

jdbc是Java连接数据库的一套规范,该规范中定义了一系列的接口,由数据库厂商提供接口实现类,由开发者根据接口,调用实现类的方法,这样开发者就可以屏蔽不同数据库的差异,无论连接什么数据库,对数据库做什么样的操作,都是一套API。

分二大类:面向开发人员(作为API)和面向数据库厂商(作为接口)

  • 流操作步骤:建立流--操作流---关闭流

  • JDBC操作步骤:加载驱动,建立连接---执行SQL语句---关闭连接

  • 以上二个都是完成内存数据和磁盘数据的转换

dao模式:建立实体类和数据库表做映射,也就是那个表对应那个类,那个属性对应那个列。而JDBC操作的目的就是完成对象数据和关系数据的转换

statement 和preparedStatement 的区别:

  1. statement是preparedStatement的父接口。

  2. statement在执行SQL语句,只能以拼接字符串方式设置值,由于每次值都不一样,所以在执行SQL语句时,都会将SQL语句重新编译,效率极低。而preparedStatement 提供占位符方式设置值,SQL语句不用每次执行都进行编译,执行效率较高。

  3. statement在执行SQL语句时,由于采用拼接字符串方式设置值,所以容易造成SQL注入,而preparedStatement使用占位符方式设置值,无论是什么值都当字符串处理,不会造成SQL注入。

SQL注入:是指在执行SQL语句时,如果以拼接字符串方式设置值,那么若果在值中有SQL语句的关键字或非法字符,可能会造成执行结果不正确胡执行失败的情况。这就叫SQL注入

开闭原则:软件实体应该面向修改关闭,面向扩展开放,其实现核心就是抽象,将相同代码抽象出来,便于代码重用,这就是闭。将不同的代码也抽象出来,便于功能的扩展,这就是开。

对象的产生是数据封装的结果,类的产生是对象抽象的一个结果,类的抽象特征和行为形成了父类,类和类抽象行为形成接口

三层架构:持久层,业务层,表现层。

  • 持久层:完成数据库相关操作,采用DAO模式,建立实体类和数据库进行映射。也就是那个类对应那个表,那个属性对应那个列,而持久层的目的就是完成关系数据和对象数据的转换。

  • 业务层:完成业务处理。采用事务脚本模式将一个业务中所有的业务操作封装成一个方法。保证该方法中所有数据库更新操作同时成功或同时失败。

  • 表现层:完成数据的展示,采用MVC模式。M:模型。也就是实体类完成数据的封装和数据的传输。V:试图。也就是GUI窗体。完成数据的展示。C:控制,也就是事件。完成业务方法的调用和业务流程控制。

  • 层与层之间采用接口作耦合,这样当其中一个层的组件发生更改或替换是,不会影响别的层组件的使用。

项目开发流程:1,需求分析2.设计3.编码4.测试和调试5.上线和维护

业务设计接口原则:一个实体类,一个业务接口,一次提交一个业务方法,业务方法的参数都来自变现层。

0 0
原创粉丝点击