MySQL 很难? 不, 看完这篇你会觉得它很简单!!! (‘‘增删查改‘‘进阶 加 补充‘‘索引,事务,JDBC‘‘)

目录

MySQL 表的增删查改(进阶篇)

Mysql 进阶篇

索引

1. 概念

2. 作用

3. 使用场景

4. 使用

4.1 查看索引:

语法:

 案例:

4.2 创建索引

语法:

案例:

4.3 删除索引 

语法:

案例:

4.4 索引的数据结构 

事务(初阶)

1. 为什么使用事务

2. 事务的概念

3. 使用

3.1 创建新的测试表:

3.2 开启事务:

3.3 执行多条SQL语句

3.4 回滚或提交:

4.事务的基本特性(重要)

JDBC编程(初阶)

尾言


MySQL 表的增删查改(进阶篇)

// 内容有点多,咱就新开一篇,xdm点击链接自取哦

// 进阶: MySQL 表的查询进阶

Mysql 进阶篇

// 这篇是我们的进阶篇,0基础的xdm建议还是从基础篇开始学习哦

// 基础篇请看 MySQL基础篇

// 1. 数据库的语言是不区分大小写的哦(您自己设置的密码除外),所以我写的代码大多都是以小写形式写的,xdm自便就好;
// 2. 作者用的是MySQL5.7版本,有需要可以私信我哦;
// 3. 咱们这个版本MySQL中的语句以; 为结束标志,回车表示换行;
// 4. 在编写代码过程中如果出现报错不要慌,看看报错信息,及时改过来就好,MySQL语句很简单的,大多数时候报错都是因为步骤或者单词拼写错误;
// 5. 编程语言其实很简单,就是拿语言规定的语法将自己的想法表达出来,简单点说就是咋想的就咋写!

索引

// 若要创建索引,最好是在刚开始创建表的时候就创建, 如果后期再创建会涉及到很多数据内容的修改, 会占用很多资源(硬盘空间)和带宽,可能会出现数据库卡死等危险, 所以一定要谨慎操作

1. 概念

        索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

2. 作用

// 数据库中的表, 数据, 索引之间的关系, 类似于书架上的图书, 书籍内容和书籍目录的关系

// 索引起的作用类似于书架上图书的书籍目录, 可快速定位, 检索数据

// 索引对于提高数据库的性能有很大的帮助

3. 使用场景

// 对数据库表的某列或某几列创建索引, 需要考虑一下几点:

        (1). 数据量较大, 且经常对这些列进行条件查询;

        (2). 该数据库表的插入操作, 及对这些列的修改操作频率较低;

        (3). 索引会占用额外的磁盘空间.

// 满足以上条件时, 考虑创建索引来提高查询效率, 反之, 如果非条件查询列, 或经常做插入, 修改操作, 或磁盘空间不足时, 不考虑创建索引!!

4. 使用

// 创建主键约束(PRIMARY KEY), 唯一约束(UNIQUE), 外键约束(FOREIGN KEY)时, 会自动创建对应列的索引

4.1 查看索引:
语法:
show index from 表名;
 案例:

// 查看学生表已有的索引

show index from student;

 

4.2 创建索引

// 对于非主键, 非唯一约束, 非外键的字段, 可以创建普通索引

语法:
create index 索引名 on 表名(字段名)
案例:

// 创建班级表中, name 字段的索引

create index idx_classes_name on classes(name);

-- 可以顺便查看一下我们创建的索引
show index from classes;

4.3 删除索引 
语法:
drop index 索引名 on 表名;
案例:

// 删除刚刚创建的班级表中 name 字段的索引

drop index idx_classes_name on classes;

-- 删除完成后我们再查看一下现在 classes 表中的索引
show index from classes;

4.4 索引的数据结构 

// 为数据库量身定制的数据结构: B+ 树 

// B+ 树是我们针对 mysql innodb 这个存储引擎来讨论, 如果其他存储引擎可能会用到 hash 作为索引 => 只能应对这种精准匹配的情况了~

事务(初阶)

1. 为什么使用事务

// 假如有一条关于改变两个关联数据(数据A 和数据B) 的语句时, A数据 变化多少, B数据 反向变化多少, 但是在正在执行第一条数据A 减少的语句时是正常的, 但当开始执行第二条数据B 增加的语句时出现了网络错误或者数据库掉了, 导致前一条数据A 减少的同时后一条数据B 并未增加, 那么就会造成额外损失,这时候就需要事务来控制了

// 解决方案: 使用事务来控制, 保证之前例子中的两条语句要么都执行成功, 要么都执行失败

2. 事务的概念

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

// 在不同的环境中, 都可以存在事务, 在数据库中就是数据库事务

3. 使用

3.1 创建新的测试表:
drop table if exists accout;

create table accout(
    id int primary key auto_increment,
    name varchar(20) comment '账户名称',
    money decimal(11,2) comment '金额'
);

insert into accout(name, money) values
    ('阿里巴巴', 5000),
    ('四十大盗', 1000);

3.2 开启事务:
start transaction;
3.3 执行多条SQL语句
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';

-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
3.4 回滚或提交:
rollback/ commit;

// rollback 即是全部失败, commit 即是全部成功

4.事务的基本特性(重要)

(1) 事务 => 原子性:  保证多个操作呗打包成一个整体, 要么能够全都执行正确, 要么就都不执行

(2) 事务 => 一致性: 事务执行前和事务执行后, 数据要能对上, 数据不能离谱(通过约束和回滚机制支撑)

(3) 事务 => 持久性: 事务这里执行的各种操作, 都是持久生效的(最终写入到硬盘中的)

// 一旦事务执行成功了, 这里的所以操作产生的修改都是写入到硬盘中的,会持久保存生效

// 计算机中, 谈到持久,一般都和硬盘脱不了干系, 因为硬盘中存储的数据就是持久话存储的

(4) 事务 => 隔离性: 并发执行事务的时候, 隔离性会在执行效率和数据可靠性之间做出权衡

// "隔离"描述的是同时执行的事务之间相互的影响

// 隔离性越高, 并发性就越低, 数据越可靠, 性能就越低

并发执行事务中常见的几种问题及解决方法(重要!!!)

① 脏读: 读取的数据是临时的, 并非是最终的准确结果

// 解决方法: 给 "写" 操作加锁, 一个事物A 写的时候, 其他事务B 不能读了, 直到 A事务写完数据, 提交事务, 其他的事务B 才能继续读取数据(我写的时候, 别人不能读, 除非我提交后才能读)

② 不可重复读: 在同一个读取数据的事务中, 可能会涉及到多次读操作, 多个读操作读到的数据不一样

// 解决方法: 给 "读" 操作加锁, 别人读的时候, 我不能写了

// 给 "读" 操作加锁意味着: 并发程度又进一步降低了, 隔离性进一步提高了, 也就是执行效率降低了, 但是数据可靠性提高了

③ 幻读: 我在写的时候不修改大家正在读的代码, 我创建一个新的类来编写, 导致一个事务在多次读的过程中, 虽然那个读到的数据的值是一样的, 但是结果集不同; 可以视为是 不可重复读 的特殊情况

// 解决方法: 串行化, 彻底放弃并发执行事务(一个事务执行完之后, 下一个事务才能执行)

// 串行: 所有的事务都是一个一个排队执行

// 此时: 并发性最低, 隔离性最高, 同时效率最低, 数据最可靠

MySQL 提供的四种隔离级别

① read uncommitted(RU): 允许读未提交的数据, (脏读, 不可重复读, 幻读) 隔离性最低, 并发程度最高, 数据可靠性最低, 效率最高;

② read committed(RC): 允许读取已经提交的数据(给写加锁了) 解决脏读, 存在不可重复读和幻读, 隔离性提高了, 并发性降低了, 数据可靠性提高了, 效率降低了

③ repeatable read(RR): 可以重复读取数据(给写操作和读操作都加锁) 解决了脏读和不可重复读, 存在幻读, 隔离性进一步提高, 并发性进一步降低, 数据可靠性更高了, 效率更低了

④ serializable: 事务彻底串行执行, 解决了脏读, 不可重复读, 幻读的问题, 隔离性最高, 并发性最低(没有), 数据最可靠, 执行效率也最低 

// MySQL 可以配置自己的隔离级别, 咱们可以根据需要来决定使用哪种隔离级别

// 大部分情况下默认的隔离级别(repeatable read 简称 RR )就够用了

JDBC编程(初阶)

// 因为这个比较关键的一块内容,因为我们需要用 idea 来链接数据库进行操作,所以单独开一篇为xdm 讲解一下, 下面有链接,有需要的自己点击哦

// JDBC 编程(初阶)详解,保姆级教程,点击即进

尾言

爆肝不易, 希望xdm 留下个宝贵的三连, 帅哥总是这么懂得共情,美女总是人美心善,祝大家暴美暴富!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿周LV

这么看的起小子, 你不暴富谁暴

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

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

打赏作者

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

抵扣说明:

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

余额充值