🔥MySQL一万字深度总结,基础+进阶(七),建议收藏。✨💖

130 阅读8分钟

💖✨MySQL一万字深度总结,基础+进阶(七)

这是我参与 8 月更文挑战的第 10 天,活动详情查看: 8月更文挑战

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:最早的心灵鸡汤,比如圣经之中的约伯记。

👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编精心为大家整理的一万字MySQL数据库核心知识、在接下来的几天为大家持续分享,💘关注不迷路呦!!!💘。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。🦄

11.存储引擎

11.1 查看建表语句,其中就带有存储引擎

show create table emp;

注意 : 其中注意 : 其中ENGINE=InnoDB代表引擎 DEFAULT CHARSET=utf8代表字符集是哪个类型的。

11.2 案例 : 创建一个新表 查看默认的存储引擎

第一步 : 创建一个新表

create table t_x(id int);

第二步 : 查看表的存储引擎

show create table t_x;

11.3 完整的建表语句

Create TABLE t_x ( id int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

注意 :

  • 在mysql中,凡是标识符可以使用飘号括起来。最好别用,不通用。
  • 1或者1都可以。可以加入多个飘号。
  • mysql默认使用的存储引擎是InnoDB方式。
  • 默认采用的字符集是UTF8

12.5 关于事务之间的隔离性

oracle数据库默认的隔离级别是 : 读已提交。 mysql数据库默认的隔离级别是 : 可重复读。

12.6 演示事务

12.6.1 mysql事务默认情况下是自动提交的。

什么是默认提交 ? 只要执行任意一条DML语句则提交一次。

怎么关闭自动提交 ? start transaction;

12.6.2 演示不关闭DML语句自动提交事务:

第一步:删除已经存在的表并创建一个新表

drop table if exists t_user;
create table t_user(
 id int primary key auto_increment,
 username varchar(255)
 );

第二步: 插入数据

 insert into t_user(username) values('zs');

第三步 : 查看没有回滚之前的数据

 select * from t_user;

第四步 : 回滚数据

rollback';

第五步 : 查看回滚之后的表数据

select * from t_user;

重点 : 此时没有使用commit进行提交,使用DML语句自动进行了提交。

12.6.3 演示关闭DML语句自动提交事务:

第一步 :关闭默认提交事务

start transaction;

第二步 : 插入数据

insert into t_user(username) values('lisi');

第三步 : 查看没有回滚之前的数据

select * from t_user;

第四步 : 回滚数据

rollback;

第五步 : 查看回滚后的数据

select * from t_user;

重点 :此时关闭了DML语句自动提交事务,回滚之后没有提交的事务将被删除,此时必须使用commit进行提交。

第六步 : 使用commit提交事务

插入数据
insert into t_user(username) values('lisi');
查看提交之前的数据
select * from t_user;
提交数据
commit;
查看提交之后的数据
select * from t_user;
回滚数据
rollback;
查看回滚后的数据
select * from t_user;

查看提交之前的数据

查看提交之后的数据

查看回滚之后的数据

13.索引

  • 创建索引对象 :

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

  • 删除索引对象 :

    drop index 索引名称;

查看sql语句的执行计划

explain select ename,sal from emp where sal = 50000;

 注意 : 此时还没有给sal字段添加索引,type字段值为ALL,代表需要查询的是所有sal的数据,rows为14代表查询的数据为14条。

给薪资sal字段添加索引 :

create index emp_sal_index on emp(sal);

查看此时的执行计划

explain select ename,sal from emp where sal = 50000;

索引的实现原理 : 

11.4 什么是存储引擎

注意 :

  • 存储引擎这个名字只有在mysql中存在。
  • oracle中有对应的机制,但是不叫做存储引擎。oracle中没有特殊的名字,就是“表的存储方式”;

11.5

  • mysql支持很多存储引擎,每一个存储引擎都对应一种不同的存储方式。
  • 每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎。

11.6 查看当前mysql支持的存储引擎

第一步 : 查看当前数据库版本

select version();

第二步 : 查看当前版本数据库中的存储引擎都有什么

show engines \G;

在此版本中存在9大存储引擎。

11.7 MyISAM 存储引擎

11.8 InnoDB 存储引擎

11.9 MEMORY 存储引擎

注意 :

  • 其中的TEXT文件和BLOB文件都是存储的二进制文件,而CLOB可以直接存储文本。
  • 表数据及索引被存储在内存中,笔记本关机之后会数据消失。

12.事务的相关知识

12.1 什么是事务 ?

  • 一个事务是一个完整的业务逻辑单元,不可再分。

比如 : 银行账户转账,从A账户向B账户转账10000,需要执行两条update语句:

update t_act set balance = balance - 10000 where catno = 'act-001'; update t_act set balance = balance + 10000 where catno = 'act-002';

以上两条DML语句必须同时成功,或者失败,不允许出现一条成功,一条失败。

要想保证以上的两条DQL语句同时成功或者失败,那么就需要使用数据库的“事务机制”。

12.2 12.2.1和事务相关的语句只有 : DML语句。(insert delete update)

因为他们这三个语句都是和数据库表当中的“数据”相关的。 事务的存在是为了保证数据的完整性,安全性。

12.2.3 假设所有的业务都能使用1一条DML语句搞定,还需要事务机制嘛

不需要,但是实际情况不是这样的,通常是一个”事儿(事务【业务】)“需要多条DML语句联合完成。

12.3 事务的原理

12.4 事务的特性 : 事务包括四大特性 ACID

  • A: 原子性 :事务是最小的工作单元,不可再分。
  • C: 一致性 :事务必须保证多条DML语句同时成功或者失败。
  • I: 隔离性 :事务A与事务B之间具有隔离(线程)
  • D: 持久性 :持久性说的是最终数据必须持久化到硬盘中,事务才算成功。

14.视图

14.1 什么是视图

站在不同的角度去看到数据,(同一张表的数据,通过不同的角度去看待)

14.2 创建视图

create view myview as select empno,ename from emp;

14.3 删除视图

drop view myview;

注意 : 只有DQL语句才能以视图对象的方式常见出来。

14.3 对视图进行增删改查,会影响到原表中的数据。(通过视图影响原表数据的,不是直接操作的原表)。可以对视图进行CRUD操作。

14.4 面向视图操作

14.4.1 查看视图中的数据

select * from myview;

14.5 复制一个emp表进行操作,为了不影响原来的emp表

第一步 :复制整张emp表

create table emp_bak as select * from emp;

第二步 :创建emp_bak的视图

create view myview1 as select empno,ename,sal from emp_bak;

第三步 :查看修改前视图中的数据

select * from myview1;

第四步 : 修改myview1中的数据

update myview1 set ename='hehe',sal=1 where empno = 7369;

第五步: 查看修改后myview1中的数据

select * from myview1;

注意通过视图修改原始表中的数据

第五步 : 查看此时emp_bak中的数据

select * from emp_bak;

注意 : 可以看到此时部门号为7369的部门数据进行了修改

第六步 :删除emp_bak的视图myview1

drop view myview1;

视图的作用

视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD;

15.数据的导入和导出

16.数据库的三范式

提醒 : 在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。

今天就先分享到这里,明天继续给大家分享,关注不迷路呦,我们明天见😊。
以上项目的源代码,点击星球🌍进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以搜索🔍微信公众号:Java学术趴,📭发送MySQL,免费给发给大家项目源码,代码是经过小编亲自测试🔧的,绝对可靠,免费拿去使用。

--------💘看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!💝---------

点击🌍星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦💪!!