在Java中想要数据的使用,这就要用到数据库的使用,今天就教大家数据库的使用

本文详细介绍了数据库的基础知识,包括数据库的定义、常见关系型数据库、数据库结构和SQL语言。深入讲解了如何在Java中使用SQL进行DDL和DML操作,如创建表、查询、增删改查等,并探讨了数据库的事务管理和备份还原。同时,还涵盖了外键约束、多表间的关系和不同类型的查询,是学习Java数据库操作的全面指南。
摘要由CSDN通过智能技术生成

1.数据库的介绍

目前来说如果我们要进行数据存储,有几种方式:

  1. 我们可以使用集合等方式将数据保存在内存中,但是数据不能持久化保存,断电/程序退出,数据就清除了

  2. 我们还可以将数据保存在普通文件中,可以持久化保存,但是查找,增加,修改,删除数据比较麻烦,效率低

所以我们需要一个既可以持久化保存数据又可以方便操作的地方来存储数据,这就是我们接下来要给大家介绍的数据库

什么是数据库

​ 数据库(DataBase,DB):指长期保存在计算机的存储设备(硬盘)上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合. 还是以文件的方式存在服务器的电脑上的。

说白了就是存储数据的仓库,可以持久保持数据,并通过sql语句快速的对数据进行增删改查操作。

常见的关系型数据库

  • MySql :开源免费的数据库,中小型的数据库,已经被Oracle收购了。MySql6.x版本也开始收费。后来Sun公司收购了MySql,而Sun公司又被Oracle收购

  • Oracle:收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MySql.

  • DB2:IBM公司的数据库产品,收费的.银行系统中.

  • SQLServer:MS公司.收费的中型的数据库.

  • SyBase:已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.

  • SQLite: 嵌入式的小型数据库,应用在手机端.

2.数据库结构

数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

  • 个数据库服务器软件可以创建多个数据库

  • 一个数据库可以创建多张表

  • 一张表可以存储多条记录

  • 客户端连接数据库服务器软件

3.数据库的安装,卸载,启动,登入

见其他的篇章

4.SQL介绍

什么是sql

  • SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)

  • SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准

  • 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。

  • 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法

sql的语法

  • 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的。

  • SQL在window中不区分大小写,关键字中认为大写和小写是一样的

sql的分类

  • Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表

  • Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改

  • Data Query Language(DQL 数据查询语言),如:对表中的记录查询操作

  • Data Control Language(DCL 数据控制语言),如:对用户权限的设置

5.DDL操作数据库

语法:

创建数据库: create database 数据库名 [character set 字符编码][collate 校对规则];-- []表示可选
查看数据库:
    查看所有数据库: show databases;
    查看数据库结构: show create database 数据库名;
删除数据库: drop database 数据库名;
修改数据库: alter database 数据库名 character set 字符编码; 注意:1.数据库名不能修改 2.只能修改数据库的编码,是utf8,不是utf-8
其他操作:
    切换数据库:  use 数据库名;
    查看正在使用的数据库: select database();

6.创建表

语法:

create table 表名(
   字段名 字段类型 [约束],
   字段名 字段类型 [约束],
   ........
   字段名 字段类型 [约束]
);
-- 注意: 小括号中最后定义的字段后面不要加逗号

类型:

  1. 整型 一般使用int 或者bigint

  2. 浮点/双精度型

    • 默认的范围 float或者double

    • 指定范围 float(M,D) eg: float(4,2) 表达的范围: -99.99~99.99

  3. 字符串

    • 固定长度 char(n) eg: char(20), 最大能存放20个字符. ‘aaa ’, 还是占20个字符的空间

    • 可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间

    一般使用varchar(n) 节省空间; 如果长度(eg:身份证)是固定的话 可以使用char(n) 性能高一点

  4. 关于大文件

    • 一般在数据库里面很少存文件的内容text, 一般存文件的路径

    • 一般不使用二进制存, 使用varchar(n)存文件的路径

  5. 日期

    • DATE 只有日期

    • DATETIME 日期和时间

 约束

  • 即规则,规矩 限制;

  • 作用:保证用户插入的数据保存到数据库中是符合规范的

约束约束关键字
主键primary key
唯一unique
非空not null

约束种类:

  • not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据

  • unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo varchar(18) unique; cardNo字段不能出现重复的数据

  • primary key;主键约束(非空+唯一); 一般用在表的id列上面. 每一张表基本上都有id列的, id列作为记录的唯一标识的

  • auto_increment: ==自动增长,必须是设置了primary key之后,才可以使用auto_increment==

  • id int primary key auto_increment id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.

注意:

  1. 先设置了primary key 再能设置auto_increment

  2. 只有当设置了auto_increment 才可以插入null 自己维护 否则插入null,会报错

  3. 一般开发中id主键会设置为自动增长

查看表

语法:

查看所有的表: show tables;
查看表的定义结构: desc  表名;

修改表

  • 增加一列: alter table 表名 add 字段名 字段类型 字段约束;

  • 修改列的类型约束:alter table 表名 modify 字段名 字段类型 字段约束;

  • 修改列的名称,类型,约束:alter table 表名 change 旧字段名 新列名 字段类型 字段约束;

  • 删除一列: alter table 表名 drop 字段名;

  • 修改表名: rename table 旧表名 to 新表名;

删除表

语法: drop table 表名;

7.DML操作表记录-增删改查

插入记录

语法:

插入指定列: insert into 表名(列名,列名,...)  values(值,值,...);
插入所有列: insert into 表名 values(值,值,...);
-- 注意:
-- - 字段名与值的类型、个数、顺序要一一对应。
-- - 值不要超出列定义的长度。
-- - 插入的日期和字符串,使用引号括起来。 
-- - 插入特定的列:没有赋值的列,系统自动赋为null(前提是当前列没有设置not null 约束,否则会报错)
-- - 默认所有列插入,values里面必须给表中每一个字段赋值,一般主键给一个null

更新记录

语法: update 表名 set 字段名=值,字段名=值,... where 条件;

删除记录

语法

  • 方式一: delete from 表名 where 条件;

  • 方式二: truncate table 表名;

  • 注意:

    delete 和truncate区别【面试题】

    • DELETE 删除表中的数据,表结构还在; 删除的记录可以找回

    • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表(空)。删除的记录不可以找回

    工作里面的删除

    • 物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除

    • 逻辑删除: 没有真正的删除, 数据还在. 搞一个标记, 其实逻辑删除是更新 eg: state字段 1 启用 0禁用

    • 工作里面一般使用逻辑删除用的多

8.DQL 操作表记录-查询

基本查询

语法:

  • 查询所有的列: select * from 表名;

  • 查询某张表特定列: select 字段名,字段名,... from 表名;

  • 去重查询: select distinct 字段名 from 表名;

  • 别名查询: select 字段名 as 别名,字段名 as 别名,... from 表名 as 别名; -- as是可以省略的

  • 列运算查询(+,-,*,/等): select 列运算 from 表名;

  • 基本条件查询: select ... from 表名 where 条件;

    • 比较运算符: > >= < <= = <>

    • between...and... 范围

    • in(值,值,...) 范围

    • like 模糊

      • _ : 匹配一个字符

      • %: 匹配0个到多个字符(大于等于0个)

    • 逻辑运算符

      • and

      • or

      • not

排序查询

方式一: select ... from 表名 order by 字段名 [asc|desc];
方式二: select ... from 表名 order by 字段名 [asc|desc],字段名 [asc|desc];
注意:asc:升序,desc:降序,不指定默认是升序

聚合查询

聚合函数作用
max(列名)求这一列的最大值
min(列名)求这一列的最小值
avg(列名)求这一列的平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求总和

(语法)select 聚合函数(列名) from 表名;

注意: 聚合函数会忽略空值null

如果不想忽略空值null,就使用ifnull(参数1,参数2)函数,进行判断

如果参数1为null,就取参数2的值,如果参数1不为null,就取参数1的值

分组查询

分组语法:

select ... from 表名 [where 条件] [group by 分组字段] [having 条件]

  1. 注意事项

    单独分组 没有意义,因为 返回每一组的第一条记录

    分组的目的一般为了做统计使用, 所以经常和聚合函数一起使用

    分组查询如果不查询出分组字段的值,就无法得知结果属于那组

  2. where和having的区别【面试】

子名作用
where 子句1) 对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,即先过滤再分组。2) where后面不可以使用聚合函数
having字句1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。2) having后面可以使用聚合函数

分页查询

语法:

select ... from 表名 limit a,b; 
a:从哪里开始查询, 从0开始计数 ,省略a不写,默认就是从0开始
b:查询的数量【固定的,自定义的】
分页查询规律:  limit (页码-1)*每页显示的记录数,每页显示的记录数

小结

select ... from 表名 [where...][group by...having...][order by...][limit...]

select ... from ...
select ... from ... where ...
select ... from ... group by ...having...
select ... from ... order by ...
select ... from ... limit ...
....

9.可视化工具的使用

可以用idea进行可视化的使用

10.外键约束

外键语法:

1. 新建表时增加外键:
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
关键字解释:
CONSTRAINT -- 约束关键字
FOREIGN KEY(外键字段名) –- 某个字段作为外键
REFERENCES -- 主表名(主键字段名) 表示参照主表中的某个字段

2. 已有表增加外键:
ALTER TABLE 从表名 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);

删除外键

  • alter table 表 drop foreign key 外键名称;

 外键的级联

 ON UPDATE CASCADE -- 级联更新,主表主键发生更新时,外键也会更新ON DELETE CASCADE -- 级联删除,主键主键发生删除时,外键也会删除

11.多表间的关系

一对多

一对多建表原则: 在从表(多的一方)创建一个字段,该字段作为外键指向主表(一的一方)的主键

多对多

多对多关系建表原则: 需要创建一张中间表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

12.连接查询

内连接查询:

内连接查询的是2张表交集的部分(从表外键的值等于主表主键的值)

1.隐式内连接

select ... from 表1,表2 where 连接条件 [and 其他条件]  -->(连接条件:外键的值等于主表主键的值) 

2.显示内连接

select ... from 表1 [inner] join 表2 on 连接条件 [ where 其它条件]

外连接查询

可以理解为:==在内连接的基础上保证左边表的数据全部显示==

语法:select ... from 左表名 left [outer] join 右表名 on 连接条件

右外连接查询

可以理解为:在内连接的基础上保证右边表的数据全部显示

语法:select ... from 左表名 right [outer] join 右表名 on 连接条件

13.子查询

  • 一个查询语句的结果作为另一个查询语句的条件

  • 有查询的嵌套,内部的查询称为子查询

  • 子查询要使用括号

  • 子查询结果的三种情况:

    1. 子查询的结果是一个值的时候

    2. 子查询结果是单列多行的时候

    3. 子查询的结果是多行多列

子查询结果是单列多行的时候

子查询结果只要是单列多行,肯定在WHERE后面作为条件子查询结果是单列多行,结果集类似于一个数组,父查询使用IN运算符SELECT ... FROM 表 WHERE 字段 IN (子查询);

子查询的结果是多行多列

子查询结果只要是多行多列,肯定在FROM后面作为SELECT ... FROM (子查询) 表别名 WHERE 条件;子查询作为表需要取别名,否则这张表没用名称无法访问表中的字段

14.事务

什么是事务

  • 事务指逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败。

事务的作用

​ 保证一组操作全部成功或者失败。

自动管理事务(mysql默认)

​ 一条sql语句就是一个事务(mysql默认自动开启事务,自动提交事务)

手动管理事务

  • 方式一: 手动开启事务的方式 【掌握】

    start transaction;开启事务

    commit;提交

    rollback;回滚

设置回滚点可以让我们在失败的时候回到回滚点,而不是回到事务开启的时候, 回滚到回滚点不会结束事务。

  • 建议手动开启事务, 用一次 就开启一次,用完了,就关闭

  • 开启事务之后, 要么commit, 要么rollback

  • 一旦commit或者rollback, 当前的事务就结束了

  • 回滚到指定的回滚点, 但是这个时候事务没有结束的

15.事务特性和隔离级别

1.事务特性

原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)事务前后数据的完整性必须保持一致.

持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

隔离性(Isolation)事务的隔离性是指多个用户并发操作数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 简单来说: 事务之间互不干扰

事务隔离级别:

​ 可以通过设置事务隔离级别解决读的问题

事务四个隔离级别

级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommitted
2读已提交read committedOracle
3可重复读repeatable readMySQL
4串行化serializable

隔离级别越高,安全性越高,性能(效率)越差。

 

设置隔离级别

  • 设置事务隔离级别

set session transaction isolation level  隔离级别;
eg: 设置事务隔离级别为:read uncommitted,read committed,repeatable read,serializable
eg: set session transaction isolation level read uncommitted;

查询当前事务隔离级别

select @@tx_isolation;

16.数据的备份和还原

备份格式

mysqldump -u用户名 -p密码 数据库 > 文件的路径

还原格式

SOURCE 导入文件的路径

注意:还原的时候需要先登录MySQL,并创建数据库和选中对应的数据库

17.数据库设计三大范式

  • 一张表只描述一件事情

  • 每张表中的字段都是不可再拆分

  • 表中的字段不能出现传递依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总长大人好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值