💖✨MySQL一万字深度总结,基础+进阶(七)
这是我参与 8 月更文挑战的第 10 天,活动详情查看: 8月更文挑战。
👨🎓作者:Java学术趴
💌公众号: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;
注意 :
- 存储引擎这个名字只有在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星球呦!!里边还有更多好玩的技术,等待大家去探索呦💪!!