数据库知识整合

目录

数据库简单介绍

数据库基础

1.常用数据类型

2.数据库的操作

3.表的操作

增删改查【CRUD】

1.新增(Create)

2.查询(Retrieve)

3.修改(Update)

4.删除(Delete)

数据库约束和表的关系

1.数据库约束【都是在创建表中出现的】

2.表的设计

CRUD进阶

1.新增(少用)

2.查询

MySQL索引事务

1.索引

2.事务

JDBC编程

数据库简单介绍

可以有效地管理数据,数据库可以提供远程服务,即通过远程连接来是使用数据库,因此有称为数据库服务器。

MySQL(关系型数据库,对数据要求严格),是现在主流的数据库,后面讲的所有知识都是围绕MySQL讲的,安装版本是5.7.27

数据库基础

1.常用数据类型

1.1数值常用类型:

int(4字节)、bigint(8字节)、double(M,D)(8字节,M是指定长度,D是指定小数位数)、decimal(M,D)(M,D同上)

1.2 字符串常用类型:

varchar(size) (可变长度字符串,size是最大长度,单位是字符,此类型的大小是0-65535字节)

1.3 日期类型:

datetime(8字节,格式是YYYYMMDDhhmmss,会自动转换成时间格式)

2.数据库的操作

2.1 显示当前数据库:show database;

2.2 创建数据库:create database [if not exists] 数据库名;

create database if not exists user character set utf8mb4(或者 charset utf8);

PS: SQL不区分大小写;[]是可选项,可写可不写;单词之间至少要有一个空格;

utf8mb4字符集是完整的utf8(utf8没有包含某些复杂的中文字符,所以utf8mb4是完整版的utf8);

2.3 使用数据库:use 数据库名;

PS:一旦选中某个数据库,后面的操作都是针对该数据库展开;

2.4 删除数据库:drop database [if not exists] 数据库名;【危险操作】

3.表的操作

需要操作数据库中的表时,需要先使用该数据库:

use 数据库名;

3.1 查看表结构:desc 表名;

3.2创建表:create table table_name(field1 datatype,field2 datatype,field3 datatype);

datatype后面可以使用comment增加字段说明;

3.3 删除表 :drop table [if not exists] 表名;【危险操作】

增删改查【CRUD】

注释:#或者--

1.新增(Create)

insert into 表名  vaules(值,值,值...)【值要和创建表的列类型相同】;

1.1:一次插入一条记录:

insert into 表名 values(值,值,值);

insert into 表名 values(值,值,值);

1.2 一次插入多条记录:insert into 表名 values(值,值,值)(值,值,值)(值,值,值);

【一次插入多条记录效率高于一次插入一条记录,mysql 是一个客户端,服务器结构的程序】

1.3 指定列插入:insert into 表名(指定列,指定列) values(值,值);

2.查询(Retrieve)

2.1 全列查询(所有行和列):select * from 表名;

2.1指定列查询:select 列名,列名 ... from 表名;

2.3 按照表达式查询:select 表达式 from表名;

【查询的是临时结果,sql四则运算中只能针对数字进行】

2.4指定别名:select 表达式 as 别名 from 表名;

【as 可以省略,但是不建议省】

2.5 去重查询:select distinct 列名 ,列名 ...from 表名;

2.6 查询结果排序:select 列名,列名.. from 表名 order by 列名/表达式 desc/asc;

2.7 条件查询:select 列名/ * from 表名 where 条件;

2.8 分页查询:select ... from 表名 limit n offset s;

【n:筛选n条结果,s:从s 开始】

3.修改(Update)

【较危险,修改的是MySQL服务器中的,保存在硬盘上的数据,是永久生效的】

update 表名 set 列 = 值 where 条件/ oeder by / limit

4.删除(Delete)

delete from 表名 [ where 条件/ oeder by / limit]

【delete from :删除之后表还在,表中的数据没有了】

【drop table : 删除之后,表和表中的数据都没有了】

数据库约束和表的关系

1.数据库约束【都是在创建表中出现的】

1.1 not null:创建表时,指定列不能为空

1.2 unique:唯一约束,指定列为唯一的、不重复的【在插入和修改时会先查询,查看是否有重复的数据】

1.3 default:默认值约束 

1.4 primary key :主键约束,指定列为主键,且是非空,不能重复的【not null 和 unique的结合】,一个表中只能由一个主键

eg:....id int not null primary key,

自增主键:auto_increment ,针对整数类型的主键, 插入数据对应字段不给值时,使用最大值+1;

1.5 foreign key :外键约束,用于关联其他表的主键或唯一键

foreign key (字段名) reference 主表(列)

PS :约束别人的是父表,被人约束的是子表;delete或者update父表中的记录时,需要查看子表中是否用过这个记录,若使用了则不能delete或者update;

带有外键约束的插入或者修改,前提是父表中已存在

check:MySQL使用时不报错,但忽略该约束

2.表的设计

一对一、一对多、多对多

CRUD进阶

1.新增(少用)

更复杂的操作,将select查询到的结果数据插入到另一个表中,插入的数据需要匹配

insert into 表名【(列,列)】 select...;

2.查询

2.1聚合查询

2.1.1 聚合函数

count、sum、avg、max、min

2.1.2 group by :对指定列进行分组查询,使用group by 需满足:select指定的字段必须是分组依据字段,其他字段若想出现在select中必须包含在聚合函数里;

select role, max(salary),min(salary),avg(salary) from emp group by rloe;

2.1.3 having

group by 字句进行分组后,需要对分组结果进行条件过滤时,需使用having,不能用where

select role, max(salary),min(salary),avg(salary) from emp group by rloe having avg(salary) < 1500;

2.2 联合查询(低效)

多表查询:对多张表进行笛卡尔积(列数是多表列之和,行数是多表行之积)

2.2.1内连接:select * from 表1,表2 where 连接条件

                       select * from 表1 join 表2 on 连接条件

2.2.2 外连接:

左外连接:  select  *from 表1 left join 表2 on 连接条件

右外连接:  select * from 表1 right join 表2 on 连接条件

2.3 自连接

在同一张表中连接自身进行查询

2.4 子查询:嵌入在其他SQL语句中的select语句(类似套娃)

2.5 合并查询:union(自动去掉结果中的重复行)/union all(不会去掉重复行) 合并多个结果

MySQL索引事务

1.索引

特殊文件,包含对数据表中所有记录的引用指针。可以快速定位、检索数据,类似于一本书的目录,但是会占用额外的磁盘空间

索引底层的数据结构是B+树,是为数据库量身定做的,原理后续详细讲解

1.1 使用:创建主键约束。外键约束。唯一约束时会自动创建对应列的索引

查看索引:show index from 表名;

创建索引(除主键、唯一约束、外键的字段外,创建普通索引):

create index 索引名 on 表名(字段名);

删除索引:drop index 索引名 on 表名;

(系统自动生成的索引不能删除,只针对手动创建的索引)

2.事务

本质是把多个操作打包成一个操作完成,这个操作么全部成功,要么全部失败(如果是操作中的某一个操作失败了,那么其他成功的操作会恢复成原始状态)

【面试高频】事务的基本特征:

一致性

原子性

持久性

隔离性(并发事务可能会出现的问题:脏数据、不可重复读、幻读(不可重复读的特殊情况))

四种事务的隔离级别:read uncommmitted 、read committed、repeatable read、serializable

JDBC编程

实际开发中,绝大部分都是用代码来操作数据库

不同数据库提供的API接口也不完全相同,所以就有大佬用Java整合了一套操作数据库的API,让所有数据库都能按照一样的方式进行操作使用

数据库驱动包:由于JDBC提供了统一的API,但是每个数据库本身也有自己的API,每个数据库厂商会提供一些代码(数据库驱动包)将JDBC的API转化成对应数据库原生API

MySQL驱动包:mysql-connector-java

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值