0


数据库总结/个人总结

目录

数据库

顾名思义,保存数据

数据和信息

Data数据

  • 任何描述事物的文字或符号都可以称为数据。
  • 软件开发就是为了收集数据,从中筛选出有用的信息。
  • 信息就是进过分析筛选后的数据。
  • 数据需要保存,保存的介质有内存或硬盘。
  • 内存中的数据是临时的,随着系统的关闭,数据也会消失。
  • 硬盘中的数据是永久,就算系统关闭,数据依然保留。
  • excel等文件保存数据是一种保存到硬盘中的途径,
  • 如果需要大量数据保存,文件系统就不再方便。
  • 使用一个系统化的数据仓库才能高效地管理数据。

数据库

  • DataBase ,称为数据库,简称DB运行在操作系统上,按照一定的数据结构,保存数据的仓库。是一个电子化的文件柜。
  • 数据永久保存在硬盘中。

数据库管理系统

  • DataBase Manager System,简称DBMS 通常所说的数据库,其实是指数据库管理系统,如MySQL、SQLServer、Oracle等。
  • 是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库。

总结

数据Data需要永久保存在数据库中
学号(字段) 姓名(字段) 专业(字段)
1001 小王 计算机
1002 小李 计算机
1003 小赵 计算机
数据库DB是运行在操作系统上的一个软件
数据库管理系统DBMS是管理数据库的一个软件
学习数据库就是学习如何使用DBMS创建、使用数据仓库来管理数据

常见的数据库管理系统

关系型数据库

  • 关系型数据库是主流的数据库类型。
  • 数据通过行row和列column的形式(表格)保存。

每行称为一条记录。
每列称为一个字段。

连接查询

交叉连接、笛卡尔积

将两张表中的数据两两组合,得到的结果就是交叉连接的结果,也称为笛卡尔积

集合A:{a,b}

集合B:{1,2,3}

集合A x 集合B = {a1,a2,a3,b1,b2,b3}

select*from 表1,表2;select*from 表1crossjoin 表2;select*from 表1innerjoin 表2;

以上三种方式都能将两张表中的数据互相组合,其中有很多无效数据。

内连接

在交叉连接的基础上,筛选出关联的数据。

select*from 表1,表2where 表1.字段 = 表2.字段;select*from 表1innerjoin 表2on 表1.字段 = 表2.字段;-- 如查询所有图书详情和类型名select*from 图书详情表 t1,图书类型表 t2 where t1.类型编号 = t2.类型编号;select*from 图书详情表 t1 innerjoin 图书类型表 t2 on t1.类型编号 = t2.类型编号;
  • 通常是通过主表的主键字段关联从表的外键字段
  • 如果两张表中关联的字段名一致,一定要通过"表名.字段名"进行区分,通常还会给表重命名
  • 如果使用inner join,带条件时需要加入where子句;如果使用,隔开多个表,带条件时需要使用and拼接条件
  • 内连接只会显示两张表中有关联的数据

左连接

-- 保证左表数据显示完整的情况下,关联右表中的数据,没有关联的用null表示select*from 表1leftjoin 表2on 表1.字段 = 表2.字段
-- 最终显示表1中的所有数据,关联表2中的数据

右连接

-- 保证右表数据显示完整的情况下,关联左表中的数据,没有关联的用null表示select*from 表1rightjoin 表2on 表1.字段 = 表2.字段
-- 最终显示表2中的所有数据,关联表1中的数据

嵌套查询

将查询出的结果继续使用在另一个查询语句中

-- 查询价格最低的图书信息select*from book_info where book_price =(selectmin(book_price)from book_info)-- 按类型分组,查询每组中图书价格大于平均价格的图书select*from book_info bi innerjoin(select type_id,avg(book_price)as avg from book_info groupby type_id)tempon bi.type_id =temp.type_id  where book_price > avg

Jar

以.jar为后缀的文件,称为Java的归档文件。保存的是Java的字节码.class文件

在Java程序中导入某个.jar文件后,就能使用其中的.class文件。

在Java项目中使用.jar文件

1.创建一个Java项目,在其中最好新建一个文件夹,将.jar文件保存在里面

2.在.jar文件上右键,点击“add as library”

JDBC

Java DataBase Connectivity Java数据库连接

用于Java程序连接不同的数据库。

实际是Java中定义的相关数据库连接时所需的接口的集合,不同的数据库对其进行了实现。

核心接口

  • Connection:用于设置连接的数据库的地址、账号、密码
  • PreparedStatement:用于预处理、执行SQL语句
  • ResultSet:用于保存查询后的数据

以上接口都来自于java.sql包中

单表查询

importjava.sql.*;publicclassMain{publicstaticvoidmain(String[] args)throwsClassNotFoundException,SQLException{//连接mysql数据库实现单表查询//1.加载连接MySQL的驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.连接数据库,提供要连接的数据库的URL、用户名、密码String url ="jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai";Connection conn =DriverManager.getConnection(url,"root","root");//3.构造查询的sql语句String sql ="select * from hero";//4.处理sql语句PreparedStatement pst = conn.prepareStatement(sql);//5.处理执行sql语句后的结果ResultSet rs = pst.executeQuery();//6.循环遍历读取查询后的数据while(rs.next()){//根据字段名获取int id = rs.getInt("id");//根据字段顺序获取String name = rs.getString(2);String sex = rs.getString(3);int price = rs.getInt(4);String makeTime = rs.getString(5);String position = rs.getString(6);System.out.println(id+"\t"+name+"\t"+sex+"\t"+price+"\t"+makeTime+"\t"+position);}//7.关闭连接
        rs.close();
        pst.close();
        conn.close();}}

SQL注入

在构造sql语句时,如果使用字符串拼接的方式构造可变的sql语句,可能会造成sql注入的风险,导致执行不是预期的sql语句

-- 如删除的sql String sql="delete from 表 where 主键="+参数;-- 实际传递 '' or 1=1deletefrom 表 where 主键=''or1=1-- 导致条件永远成立,最终删除了所有数据-- 查询的sql  String sql="select * from 表 where name="+name +"and pwd="+pwd;-- 实际第一个参数传递 '' or 1=1 -- select*from 表 where name =''or1=1-- pwd=-- 导致第二个参数被注释,第一个参数永远成立

在构造sql语句时,使用?占位,通过preparestatement方法防止sql注入的风险

简化JDBC

DBUtil数据库工具类

importjava.sql.*;/*
 * 定义数据库工具类,简化JDBC操作
 * 可以简化的操作
 * 1.加载驱动   √
 * 2.连接数据库 √
 * 6.关闭   √
 * */publicclassDBUtil{/*
     * 定义静态代码块用于加载驱动
     * */static{try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(ClassNotFoundException e){System.out.println("驱动不存在"+ e);}}//定义静态常量保存连接数据库的字符串privatefinalstaticString URL ="jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai";privatefinalstaticString USERNAME ="root";privatefinalstaticString PASSWORD ="root";/*
     * 定义静态方法获取连接对象
     * */publicstaticConnectiongetConn(){Connection connection =null;try{
            connection =DriverManager.getConnection(URL, USERNAME, PASSWORD);}catch(SQLException e){System.out.println("连接数据库信息异常"+ e);}return connection;}/*
     * 定义静态方法释放资源
     * */publicstaticvoidrelease(Connection conn,PreparedStatement pst,ResultSet rs){//使用了哪个接口就关闭那个接口try{if(rs !=null){
                rs.close();}if(pst !=null){
                pst.close();}if(conn !=null){
                conn.close();}}catch(SQLException e){System.out.println("关闭异常"+ e);}}}

视图View

视图可以当做数据库中的一个临时表,保存一些较为复杂的查询后的结果。
之后可以直接通过该视图查询数据,不需要再次编写复杂的sql语句。
视图同时可以隐藏一些查询细节,定制查询数据。

创建视图

createview 视图名 as
查询的sql语句;

使用视图

修改视图中的数据,会直接修改原始表中的数据。

select*from 视图名;

删除视图

dropview 视图名;

事务transaction

事务是由一组sql语句组成的执行单元,这些sql之间一般都互相依赖。
如A给B转账
1.update 表 set money = money-1000 where id=1
2.update 表 set money = money+1000 where id=2
以上两句sql组成了一个转账的事务。一个事务要么全部执行,要么全部不执行。

事务的特性ACID

Atomicity原子性

事务是最小的执行单元,要么全部执行,要么全部不执行。

Consistency一致性

事务执行前后,必须让所有数据保持一致状态。(总体数据守恒)
create view 视图名 as
查询的sql语句;
select * from 视图名;
drop view 视图名;

Isolation隔离性

多个事务并发执行时应该互相隔离,互不影响。

Durability持久性

事务一旦提交,对数据的改变是永久的。

存储引擎

  • MySQL5.5版本之前,默认使用MyIsam存储引擎,不支持事务
  • MySQL5.5版本之后,默认使用InnoDB存储引擎,支持事务

本文转载自: https://blog.csdn.net/qq_53431712/article/details/129839107
版权归原作者 程序员老茶 所有, 如有侵权,请联系我们删除。

“数据库总结/个人总结”的评论:

还没有评论