数据库详解


前言

数据库

  • 数据库是为处理复杂存储业务而出现的,数据量过大会导致传统存储查找和修改很慢,数据库设计也是优化这些弊端,进行优化存储的
  • 数据库是按照某种规则和方法组织起来 数据 的 集合,它可以实现 数据的独立性 实现数据共享 减少数据的冗余度 数据实现集中控制 数据一致性和可维护性

一、DBMS

DBMS 数据库管理系统 常见数据库
DBMS 是 DataBaseManagermentSystem 数据库管理系统 的首字母缩写
根据业务需求合理选用DBMS, 常见的有:

  • MySQL 现 Oracale 公司产品, 市场占有率第一, 性价比高又开源, 以前是Sun公司开发的后来被Oracle公司收购, 再后来原MySQL团队又开发出了MariaDB
  • Oracle Oracle公司原产品 由于付费和闭源 付费按存储容量计费, 市场占有率第二
  • SQLServer 微软公司产品 也是闭源, 主要用于微软那一套架构操作系统+ .net + web服务软件+SQLServer) 集成一套完整体系 市场占有率第三
  • IBM公司的 DB2
  • 轻量级数据库 SQLite 体积小,安装包只有 几十KB 但是功能少,只有增删改查功能

二、SQL

结构化查询语言 背景
SQL 是 Structured Query Language 的简称,是一种数据库查询和程序设计语言, 它不需要用户 了解数据的存储方式 所以不同底层结构的数据库 也可以用相同的 SQL 作为数据存储和管理的接口
SQL语言在1974年被创建, 首先用在IBM的SystemR上, 1980年美国国家标准局将SQL作为关系数据库语言, 之后被ISO(国际标准化组织) 定为国际标准

1.语言特点

非过程化 风格统一 面向集合操作 语言简单

用SQL进行操作时, 不需要用户关心 存储位置和 存储方式 减轻用户负担 有利于提高数据独立习性
SQL可以独立完成 数据库生命周期中的全部活动, 如 建立/删除 数据库或表 增删改查表中数据 重构 维护 数据库安全性控制一系列操作,而且不影响数据库运行, 从而使系统具有良好可扩充性
SQL 增删改查对象可以是元组的集合
语言简单核心功能只用了几个动词 实现

2.语句结构

结构

  1. DDL: 数据定义语言 完成对数据库和表的操作(增/删等)
  2. DQL: 数据查询语言 完成数据库的查询操作
  3. DML: 数据操作语言 完成数据库中表数据的增删改操作
  4. TCL: 事务控制语言 完成被DML语句影响的表的所有行及时得以更新
  5. DCL: 数据控制语言 完成权限控制, 分配用户对数据库的权限

三、数据库安装

安装 可视化工具
一般安装mysql数据库,因为开源免费, 可以去官网下载安装即可 安装包几百MB
安装完后可以用CMD窗口操作, 用数据库可视化工具也可以 有 SQLyog …等 IDEA也有数据库配置也可以用

四、JDBC

Java数据库连接 数据库驱动

  • JDBC 是 JavaDataBaseConnectivity 的简写 翻译过来是 Java数据库连接
  • JDBC是一套用于Java语言和数据库软件进行连接的API(ApplicationProgrammaInterface应用程序接口) 它是Sun公司制定的标准, 由各个数据库厂家按照接口标准 编写的各自 实现类 这个实现类也叫数据库驱动 就是一个jar包
  • 只要掌握JDBC 接口中的方法就可以访问任何数据库软件
  • 如果开发用Mybatis框架 它里面封装了JDBC代码,JDBC部分代码也不用写了,直接利用Mybatis的反射注解就可以完成与数据库的交互
<!-- JAVA连接MySQL数据库的依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>

五、数据类型

整型 浮点型 字符串 日期

1.整型

整数: int(n) 和 bigint(n), n表示长度,如需自动补零SQL执行时用 zerifill 关键字n=4 存 99 得 0099,bigint(n) 先当于Java中的long

create table n(age int(4) zerofill);

2.浮点型

浮点数: double(n,d) n 代表总长度, d代表小数长度, 如n=5,d=2 数123.45满足条件,大于条件会出现 999.99错误

create table n(price double(5,2));

3.字符串

固定长度: char(n) ,字符串占固定占n个字符串,当存储长度固定时使用, 执行效率略高,n的最大长度为255
可变长度: varchar(n), 字符串最大长度为n,不足n长度,按实际长度算,n的最大长度65535,一般在长度小于255时使用
可变长度: text(n) , n最大长度65535,一般在长度大于255时使用

4.日期

data: 保存 年月日
time: 保存 时分秒
datatime: 保存 年月日时分秒,默认值null
timestamp: 保存 年月日时分秒,默认值为当前系统时间 可用时间戳1970年1月1日到现在的毫秒数

六、数据库基本操作

mysql 登录/退出 库相关 表相关 数据相关

1.登录和退出

mysql 登录 退出

SQL语言以 “;” 结尾 如果不写分号,会自动换行等待输入

//登录mysql
// - u 后是用户名 -p 后回车输入密码即可
mysql -uroot -p
//退出mysql 直接exit; 回车即可
exit;

2.库相关

创建/删除 库 查询库信息 使用库

  • 创建/删除 数据库
//创建库 mydb 使用默认字符集
create database mydb;
//创建库 mydb 使用指定 utf8 字符集
create database mydb charset=utf8; 
//删除库 mydb 
drop database mydb;
  • 查询库信息
//显示所有库信息
show databases;
//指定查询库 mydb 可以显示数据库使用的字符集
show create database mydb;
  • 使用数据库
    在数据库中对表操作时先使用库
//使用库 mydb 
use mydb;

3.表相关

新建/删除表 查询表 表重命名 添加/删除/修改 字段
使用库mydb后

  • 新建/删除表
//新建表 emp  不定长name字段 字段最长占8字符(字符小于8按实际存储字节确定) 使用数据库默认字符集
create table emp(name varchar(8));
//新建表 emp  定长name字段 字段占8字符(字符小于8空位以英文空格填充) int型 sal 字段 并 使用数据库 utf8 字符集
create table emp(name char(8),int sal)charset=utf8;
//删除表
drop table emp;
  • 查询表
//显示 mydb库 下的所有表名
show tables;
//描述 emp 表 所有字段信息
desc emp;
//显示 emp表中 字符集 和 引擎 与 字段信息
show create table emp;
  • 表重命名
//把 emp表 修改名称为 emp1
rename table emp to emp1;
  • 添加/删除/修改 表字段
//在 表emp 最后添加 可变长度最长8字符 的 job字段
alter table emp add job varchar(8);
//在 表emp 最前面添加 int 型的 id 字段
alter table emp add id int frist;
//在 表emp 的name字段后 添加 可变长度最长50字符的 address 字段
alter table emp add address varchar(50) after name;
//删除 表emp 中的 address 字段
alter table emp drop address;
//修改 表emp 中的 sal 字段为 address varchar(50)
alter table emp changer sal address varchar(50);

4.数据的基础操作

插入数据 查询数据 修改/删除 数据

执行SQL语句 create table person(name varchar(50),age int);

  • 插入数据
    全表插入 指定字段插入
//向 表person 全表插入 Tom,18  Jerry,18
insert into person values("Tom",18),("Jerry",18);
//向 表person 指定字段插入 lucy lily
insert into person(name) values("lucy"),("lily");

如果插入中文字符数据报错,如果不是SQL语法问题,执行 set names gbk;可能是终端编码和数据库解码字符集不一样,此时要指定数据库解码字符集

  • 查询数据
    查表中所有数据 指定查询字段数据 条件查询
//查询 表person 中的所有数据
select * from person;
//查询指定一个或多个字段数据 查询person中name和age字段的数据
select name,age from person;
//指定筛选条件查询 查询person表中 age>18 的人的姓名
select name from person where age>18;
  • 修改/删除 数据
//修改 表person 中"Tom" 为 "汤姆"
update person set name="汤姆" where name="Tom";
//删除 表person 中 所有 name="汤姆"的数据
delete from person where name="汤姆";

5.主键约束

主键 约束 自增

  • 关键字: primary key
  • 作用: 限定主键的值 唯一且非空
  • 主键: 表示数据唯一性的字段称为主键
  • 用法: 一般给表添加 id 配合自增关键字 auto_increment使用,在前后端交互中用主键去完成一些业务逻辑, 如果想改变id 只能删除表再重新建表, 当id字段不给值时, 默认自增1,指定值后, 再默认自增时会 指定值+1
//新建 表emp 并让它的id字段 唯一且非空
create table emp(id primary key auto_increment,name varchar(9),age int);

6.常用查询方法

去重 判断是否为空 and与or 比较运算符 between...and in 模糊查询 排序 分页 别名 聚合函数 having

  • 查询结果去重
//查询 emp 中有几种 不同的 job
select distinct job from emp;
  • 多条件判断
    多个条件是 或 关系时用: or
    多个条件是 与 关系时用: and
//查询 emp 中有Tom 和 Jerry 的年龄
select age from emp where name="Tom" or name="Jerry";
  • 比较运算符
    <、>、<=、>=、!=、<>(推荐使用)
    分别是 小于,大于,小于等于,大于等于,不等于,不等于
    注意: <>也是不等于,ANSI标准中用的是<>, 有些数据库不支持 !=
//查询 emp 中 age 不等于10的人的姓名
select name from emp where age<>10;
  • in关键字
    当查询某个字段的值为多个时使用 in
//查询 emp 中 id 是 1,2,3的人的信息
select * from emp where id in(1,2,3);
  • between…and
    用来查询在特定范围内的数据
//查询 emp 中 age 在 18~50 之间的name和age
select name,age from emp where age between 18 and 50;
//查询 emp 中 age 不在 18~50 之间的name和age
select name,age from emp where age not between 18 and 50;
  • 判断值是否为null
    数据如果为空,null不能直接参与运算,必须用特定的 is null 和 is not null 语句
//查询 emp 中 age 为 null 的 name
select name from emp where is null;
//查询 emp 中 age 不为 null 的 name
select name from emp where is not null;
  • 模糊查询
    关键字: like
    %: 代表最少为0个的未知字符
    _: 代表1个未知字符
    用法:
    查开头: X% , 查结尾: %X , 查第二个字符: _X%
//查询 emp 中 name字段中数据 以 T 为开头的 name 数据信息
select name from emp where name like "T%";
  • 查询结果排序
    关键字: order by asc(默认升序)/desc(降序)
//查询 emp 中 信息 以 id 升序排列
select * from emp oreder by id;
//查询 emp 中 信息 以 id 降序排列
select * from emp oreder by id desc;
  • 分页查询
    关键字: limt 跳过的条数,请求的条数
    如: 查询第5页的5条信息: limt 20,5;
//查询 emp 中 sal 排名前三 人的信息
select * from emp oreder by sal desc limit 0,3;
  • 别名
    只是查询后显示的字段名称不一样,表中数据没有改变
    格式: 查询字段 as 别名 (使用中可省略 as )
//查询 emp 中 所有人的 name以 名字 为字段
select name as 名字 from emp;
select name 名字 from emp;
  • 聚合函数
    将查询到的多条数据进行统计查询,包括: 求最大值(max),最小值(min),平均值(avg),求和(sum),计数(count)
    格式: 查询字段 as 别名 (使用中可省略 as )
//查询 emp 中 所有人的 sal 平均值
select avg(sal) from emp;
//查询 emp 中 sal>0 的人数
select count(*) from emp where sal>0;
  • 分组查询
    可以将表中某个字段相同的数据划分为一组,以组为统计
    格式: group by
//查询 emp 中 每种 job 的平均 sal 
select job,avg(sal) from emp group by job;
  • having关键字
    where 后面只能写普通字段的条件,不能写聚合函数条件, having是专门写聚合函数条件的
    关键字: having(用在聚合函数后面)
//查询 emp 中 每种 job 的平均 sal 只查询 平均sal>100的部分
select job,avg(sal) from emp group by job having avg(sal)>100;

阶段小结: select * from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit 跳过条数,请求条数;

七、嵌套查询

嵌套查询又叫子查询, 它可以使一个查询语句的结果作为另一个查询语句的条件,而且可以根据业务需求多层嵌套查询

//查询 emp 表中 sal 最高的 人的信息
select * from emp where sal=(select max(sal) from emp);

八、关联查询

一对一 一对多 多对多
关联: 一个项目中创建的表与表之间存在业务关系
关系类型:

  • 一对一 : A表中的一条数据 对应 B表中的一条数据, B表中的一条数据 对应 A表中的一条数据
    一对一关系对应数据 A表和B表都能保存
  • 一对多 : A表中的一条数据 对应 B表中的多条数据, B表中的一条数据 对应 A表中的一条数据
    一对多关系对应数据 保存在多的关系表中
  • 多对多 : A表中的一条数据 对应 B表中的多条数据, B表中的一条数据 对应 A表中的多条数据
    多对多关系 需要有额外一张表保存 A-B的数据对应关系

1.等值连接查询

用来查询两张表的交集部分
格式: select * from A,B where 关联关系 and 其他条件;

2.内连接查询

用来查询两张表的交集部分
格式: select * from A join B on 关联关系 where 其他条件;

3.外连接查询

用来查询一张表的全部和另一张表的交集部分
格式: select * from A left/right join B on 关联关系 where 其他条件;

阶段总结: 如果查询数据是两个表的交集数据,使用等值连接或内连接(推荐), 如果查询的是一张表的全部和另一张表的交集使用外连接


总结

以上就是数据库的基本信息,本文仅仅简单介绍了数据库的使用, 了解这些就可以基本使用数据库了,而SQL也提供了更复杂符合业务需求的语句, 有需要就要去提高了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库是一种关系型数据库管理系统,它由物理操作系统文件或磁盘的集合组成,称为数据库。一个数据库可以被多个实例装载和打开,而实例则是一组Oracle后台进程/线程以及共享内存区,由运行在同一台计算机上的进程/线程共享。实例可以维护易失的、非持久性内容,并可以在没有磁盘存储的情况下存在。实例和数据库之间的关系是,一个数据库可以由多个实例装载和打开,而一个实例在其生命周期中最多只能装载和打开一个数据库。实例是由一组操作系统进程(或者是一个多线程的进程)以及一些内存组成,这些进程可以操作数据库,而数据库则是一个文件集合,包括数据文件、临时文件、重做日志文件和控制文件。大多数情况下,一个数据库上只有一个实例对其进行操作。然而,Oracle还提供了一个选项,称为Real Application Clusters(RAC),允许在集群环境中的多台计算机上操作数据库,从而实现高度可用的系统和可扩缩性极好的解决方案。 在Oracle中,为了找到某列的最大值或最小值,可以借助函数来实现,因为Oracle中没有像MySQL中的LIMIT这样的功能。另外,在对Oracle数据库进行优化时,可以从数据库的体系结构、软件结构、模式对象以及具体的业务和技术实现等多个方面进行统筹考虑,并对应用程序、I/O子系统和操作系统进行相应的优化。优化是有目的地更改系统的一个或多个组件,以改善性能,减少响应时间,增加吞吐量。 最后,Oracle支持多种数据类型及其对应的长度范围,这些数据类型包括整数、浮点数、日期和时间、字符和文本、二进制数据等。可以根据需要选择合适的数据类型来存储和处理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Oracle数据库详解(超详细)](https://blog.csdn.net/segegefe/article/details/125213545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [oracle数据库的深度解析](https://blog.csdn.net/lx_Frolf/article/details/84138488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值