当前位置: 首页 > news >正文

数据库基本操作

数据库介绍


数据库管理系统介绍


表和javabean的关系(会封装成javabean)

注册情况:

在controller层就把传入的数据封装成一个javabean对象

查询情况:


mysql-sql语言介绍


mysql-sql语言通用语法说明


mysql-sql中的数据类型


mysql-数据库操作


mysql-表操作

表的创建和查看


删除表


修改表结构(了解)


mysql-数据操作

插入数据

varchar用单引号:因为之后写sql语句不是在mysql中写,而是在java中写,所以不应该用双引号,应用单引号:

可能会出现双引号匹配错误的问题,第一个双引号应该和最后一个双引号匹配,可能会匹配到蔬菜前面那个双引号

正确做法:


删除数据


修改数据


mysql-约束

主键约束

添加方式3:一开始创建表的时候不指定主键,后面通过修改表结构的方式设定主键


联合主键

注意:虽然有多个列,也只有一个主键,多个列组合而成的一个主键

删除主键:通过修改表结构


自增长约束

自增长的那一列就可以不用维护了。自动编号。

删除主键自增长:

如果我删除了编号为7的数据,之后我再添加数据之后,编号就会从8开始,这个编号7的行就不会再添加数据了


delete-truncate区别


非空约束


唯一约束

单表查询

简单查询


条件查询


排序查询

查询顺序

所有的查询语句都是从from开始执行,在执行过程中,每个步骤都会生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入,最后一个步骤产生的虚拟表即为输出结果。


聚合查询


分组查询


分页查询(优化方案)

有两种参数的形式:

如果是以逗号分隔的,就是offset在前,count在后,然后就是用limit <count> offset<offset>标明

如果后面只有一个参数,就是指count,代表从1开始获取count条。

①参数count代表一页要展示多少条数据。

②参数代表我要从第几条数据开始往下查询。

offset是分页开始的起点,每次都要从1开始扫描到那个起点,性能差。

如:SELECT * FROM table LIMIT 20 OFFSET 40;

说明一页有20条数据,要查询第三页的数据,因为

  • 这种方式直接从id >= 100001开始查询,不需要跳过前面的记录,因此避免了大量无用的扫描。相当于代替了offset的作用。
  • id字段通常有索引,利用这个索引可以高效地定位查询的起点,从而提高分页查询的效率。
  • 利用子查询也是去查找到分页开始的起点,避免再使用offset从头开始扫描。

数据库备份与还原

但大多使用图形化界面点击备份


数据库三范式

第一范式:这个属性不可再拆分

第二范式:1NF基础上,非码属性必须完全依赖于候选码(1NF基础上消除非主属性对主码的部分函数依赖)

第二范式需确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键)。

第三范式:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。


多表关系

多表之间的关系说明


学生成绩表-学生信息表说明


一对多-建立外键约束


多对多-建立外键约束

中间表存的是两个主表的主键


多表查询-交叉查询

所以就要添加更多的条件


多表查询-内连接


多表查询-外连接


多表查询-全外连接


多表查询-子查询


多表查询-子查询作为伪表使用


mysql函数

数据准备


字符串函数

mysql函数-数值函数-日期函数


mysql函数-if函数


DCL语句说明-分配权限

给用户分配权限:


JDBC-介绍


JDBC-准备工作

要使用JDBC就必须导入他的jar包,想要管理哪种数据库就要下载哪个数据库的驱动,查询操作会查询出来一堆数据,这堆数据存的地方就是ResultSet


JDBC-开发步骤-详解

如果使用原生JDBC开发,步骤是固定的,都是这7步


JDBC-注册驱动


JDBC-获取连接


JDBC-插入操作


JDBC-修改操作


JDBC-查询操作

上面都一样


JDBC-抽取工具类

增删改查的时候前面的注册驱动等操作经常重复,所以把重复的部分抽取成工具类。

当遇到异常时,用try。。。catch处理

工具类:

改完之后:

或者:


JDBC-获取最新添加数据id

注意:这个只有在id是自增长(id不能手动指定)的情况下才能获取正确id值


JDBC-用户登录分析


JDBC-sql注入说明

但是!这种操作意味着你密码无论输入什么字符串都会被拼在sql语句中

这样就会发生sql注入问题。

就算你密码输入错误,只要永远为真,都能登陆成功,这样在你的sql语句捣乱的就叫sql注入


JDBC-PreparedStatement预处理对象

所以不能直接拼字符串了。

解决方法:

改造:

他会认为你输入的一坨是一个整体,里面的符号不会和外面的符号匹配

添加:


JDBC-改造工具类-读取properties配置

如果数据库的信息一旦改变,就要修改源码,所以就把数据库的信息抽取到properties中

修改:

批量添加操作

批处理后面要多加一个参数:


连接池-介绍(简化)


连接池-C3P0

下面的代码直接复制就行,这段代码就放在c3p0-config.xml文件里

这边关闭资源中的关闭连接也不是真正把连接关闭了,而是将连接归还给连接池


连接池-Druid连接池


DBUtils-准备工作(进一步简化)

导包,创建Utils工具类


DBUtils-介绍


DBUtils-空参QueryRunner使用


DBUtils-有参QueryRunner使用

这个写在DruidUtils类中:


DBUtils-查询-BeanHandler使用(封装第一行)

先创建一个JavaBean,属性要和表对应


DBUtils-查询-BeanListHandler(封装所有行)


DBUtils-查询-ScalarHandler(处理单值的:聚合函数)


DBUtils-查询-ColumnListHandler


事务-mysql中的事务操作

在还没commit之前,都是临时的数据,一旦commit,就要存储进表中了,commit之后就不能再回滚了


事务-分层事务-环境搭建


事务-转账案例-表现层实现


事务-转账案例-业务层和持久层实现


事务-转账案例-添加事务

没有添加事务,所以会出现不一致问题。

回滚事务:conn.rollback()

注意:如果要设置事务,就必须要使用同一条连接,所以以上的事务无法成功,因为在outmoney和inmoney里面也都各有一条连接,所以现在一共有三条连接。

解决方法,把outmoney和inmoney中的两条连接都删掉,只保留service层的那条连接,把service层的那条连接作为参数传入outmoney和inmoney,供他们使用:


转账案例-问题描述


ThreadLocal的介绍

一个ThreadLocal只能存储一个值,但是可以创建多个ThreadLocal对象来存储多个不同的值。

之前获取连接和事务操作都放在service中,现在重新创建一个连接管理类去进行这些操作

保证一条线程内都是同一条连接


连接工具类完成


事务的特性以及隔离级别说明

http://www.jsqmd.com/news/449211/

相关文章:

  • 通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
  • 数据结构排序算法复习
  • 链表经典算法实现思路
  • zynq verilog iic读取pac1934电流和电压
  • 学术写作的“隐形盾牌”:书匠策AI如何让论文“安全通关”查重与AI检测?
  • JSP网页如何结合HTTP协议优化局域网内视频文件的秒传与目录结构保留?
  • Hash,布隆过滤器,hyperloglog
  • 2026年上海遗产继承律师电话查询推荐:实用查询指南分享 - 品牌推荐
  • 学术写作的“隐形裁缝”:书匠策AI如何用AI魔法让论文“改头换面”又“保真”
  • 一篇搞定蓝桥杯 C/C++ 基础知识点
  • HBuilder X 的下载与初识HTML5页面
  • 2026年中国遗嘱继承律所电话查询推荐:权威联系与使用指引 - 品牌推荐
  • [KV存储]从零构建高性能 KV 存储网络层
  • 学术写作的“变形记”:书匠策AI如何让论文“改头换面”却“灵魂不变”
  • 2026年免费降AI率网站合集,毕业生必备收藏
  • 南昌极简门制造企业哪家好用,性价比高的品牌推荐 - 工业品牌热点
  • 学术写作的“智能调音师”:书匠策AI如何让论文摆脱机械感,奏响原创乐章
  • 互联网大厂Java求职者面试全攻略:技术深度与精彩代码案例
  • 聊天系统 / 即时通讯(IM)技术文档
  • SQL 语句大全:最全面的语法格式指南
  • nodejs 网上商城商铺小程序多商家
  • 2026年特色泡菜选购指南,特色湘西姑娘泡菜实力强不强看这里 - mypinpai
  • springboot基于web的积分制零食自选销售平台的设计与实现(源码+文档+调试+vue+前后端分离)
  • 需要频繁修改文件、批量修改文档,或需要更灵活的时间设置怎么办?
  • python环境搭建
  • OpenClaw 深度解析(六):节点、Canvas 与子 Agent
  • AI推广联系哪家公司?哪家公司豆包推广做得专业? - 品牌2026
  • 2026年不容错过!最新口碑好的短视频获客老牌公司大揭秘,抖音运营公司/抖音代运营团队,短视频获客老牌公司排行榜 - 品牌推荐师
  • 帝国cms为什么[!--writer--]不能在列表中调用?EmpireCMS
  • 帝国cms安装界面不能正常显示EmpireCMS