带你走进MySQL数据库(MySQL入门详细总结三)

导读:关于MySQL,用三篇文章带你进入MySQL的世界。文章较长,建议收藏再看!html

1.存储引擎

不一样的引擎,表具备不一样的存储方式。
建表的时候能够指定存储引擎,也能够指定字符集。
mysql默认使用的存储引擎是InnoDB方式。
默认采用的字符集是UTF8程序员

1.什么是存储引擎
每个存储引擎都对应一种不一样的存储方式。sql

2.查看当前mysql支持的存储引擎。
show engines \G数据库

3.常见的存储引擎:
MySIAM这种存储引擎不支持事务。
比较经常使用。
他管理表具备如下特征:安全

  • 1.使用三个文件表示每一个表:
    格式文件----存储表结构的定义(mytable.frm) 格式
    数据文件----存储表行的内容(mytable.MYD) 数据
    索引文件—存储表上的索引(mytable.MYI) 索引
    2.灵活的AUTD_INCREMENT
    3.可被压缩、可转换为只读表,节省空间

缺点:不支持事务。服务器

InnoDB引擎
优势:支持事务,行级锁,外键,级联删除和级联更新等。这种引擎数据最安全。
数据存储在tabalespace这样的表空间中(逻辑概念),没法被压缩,没法转换成只读。
在mysql服务器崩溃后提供自动恢复。数据结构

MEMORY引擎
缺点:不支持事务,数据容易丢失,由于表数据和索引都是存储在内存当中。
优势:查询数据最快。并发

2.事务(Transaction)

1.事务的概述
什么是事务?
一个事务是一个完整的业务逻辑单元,不可再分。
好比:银行帐户转帐,从A帐户向B帐户转帐10000,须要执行两条update语句。
update t_act set balance = balance -10000 where actno = ‘adfa1’;
update t_act set balance = balance+10000 where actno = ‘adfa2’;
以上两条DML语句必须同时成功,或者同时失败,不容许出现一条成功,一条失败。
要想保证以上的两条DML语句同时成功或者同时失败,那么就须要使用数据库的“事务机制”。

2.和事务相关的语句只有:DML语句。(insert delete update)
由于他们这三个语句都是和数据库表当中的数据相关的。
事物的存在就是为了保证数据的安全性,和完整性。

3.假设全部的业务都能使用1条DML语句搞定,还须要事务机制吗?
答:不须要事务。
但一般一个事务(业务),须要多条DML语句共同联合完成。

在这里插入图片描述

提交事务(会写到文件)commit
回滚事务(不会写到文件)rollback

4.事务的控制语句(TCL)
事务控制语句:
BEGIN 或 START TRANSACTION 显式地开启一个事务;

COMMIT 也可使用 COMMIT WORK,不过两者是等价的。COMMIT 会提交事务,并使已对数据库进行的全部修改为为永久性的;

ROLLBACK 也可使用 ROLLBACK WORK,不过两者是等价的。回滚会结束用户的事务,并撤销正在进行的全部未提交的修改;

SAVEPOINT identifier,SAVEPOINT 容许在事务中建立一个保存点,一个事务中能够有多个 SAVEPOINT;

RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

ROLLBACK TO identifier 把事务回滚到标记点;

SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
5.事务的特性
事务包括四大特性:ACID
A:原子性:事务是最小的工做单元,不可再分。一个事务(transaction)中的全部操做,要么所有完成,要么所有不完成,不会结束在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。

B:一致性:事务必须保证多条DML语句同时成功或者同时失败。在事务开始以前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须彻底符合全部的预设规则,这包含资料的精确度、串联性以及后续数据库能够自发性地完成预约的工做。

C:隔离性:事务A与事务B之间具备隔离。数据库容许多个并发事务同时对其数据进行读写和修改的能力,隔离性能够防止多个事务并发执行时因为交叉执行而致使数据的不一致。事务隔离分为不一样级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

D:持久性:最终数据必须持久化到硬盘文件中,事务才算成功的结束。事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。

6.事务之间的隔离性
事务隔离的隔离级别:
第一级别:读未提交(read uncommitted)
对方事务尚未提交,咱们当前事务能够读取到对方未提交的数据。存在脏读(Dirty Read)现象:表示读到了脏的数据。

第二级别:读已提交(read committed)
对方事务提交以后的数据我方能够读取到。
读已提交存在的问题是:不可重复读取。
解决了脏读现象。

第三级别:可重复读(repeatable read)
这种隔离级别解决了:不可重复读问题。
存在的问题:读取到的数据是幻象。

第四级别:串行化/序列化
解决全部的问题。须要事务排队。
mysql默认的级别是可重复读。
oracle默认级别是:读已提交。

演示:
mysql事务默认状况是自动提交。即只要执行一条DML语句则提交一次。
怎么关闭自动提交?
用:start transaction;

使用两个以上的事务演示以上的隔离区别:
查询当前隔离级别:select @@global.tx_isolation;
设置事务的全局隔离级别:set global transaction isolation level read uncommitted;

3.索引

1.什么是索引
索引就至关于一本书的目录,经过目录能够快速的找到对应的资源。
在数据库方面,查询一张表的时候有两种检索方式:
第一种方式:全表扫描
第二种方式:根据索引检索(效率很高)
索引虽然能够提升检索效率,可是不能随意添加索引,由于索引也是数据库当中的对象,也须要数据库不断的维护,是由维护成本的,好比,表中的数据常常被修改这样就不适合添加索引,由于数据一旦修改,索引就须要从新维护。

2.怎么建立索引对象?怎么删除索引对象?
添加索引是给某些字段添加索引。
如:select ename ,sal from emp where ename = ‘sfsa’;
当ename字段没有添加索引的时候,以上sql语句会进行全表扫描,扫描ename字段中全部的值。
当ename字段上添加索引的时候,以上sql语句会根据索引扫描,快速定位。

给字段添加索引:
create index emp_sal_index on emp(sal);
create index 索引名称 on 表名 (字段名)

删除索引对象:
drop index 索引名称 on 表名;

3.何时考虑给字段添加索引?(知足什么条件)
*数据量庞大。(根据客户的需求)
*该字段不多修改。(不多DML操做)
*该字段常常出如今where子句中。(常常根据哪一个字段查询)

4.注意:主键和具备unique约束字段自动会添加索引。
根据主键查询效率较高,尽可能根据主键检索。

5.查看sql语句的执行计划
explain + sql语句。

6.索引底层采用的数据结构是:B+Tree
7.索引的实现原理:
在内存或硬盘建立一个索引。索引自动排序。
索引分区。
经过b-Tree缩小了扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终经过索引检索到数据以后,获取到关联的物理地址,经过物理地址定位表中的数据,效率是最高的。

8.索引的分类
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加1个索引
主键索引:主键上自动添加索引。
惟一索引:有unique约束的字段上会自动添加索引。

9.索引何时失效?
好比模糊查询的时候,第一个字符使用的是%,这时候索引是失效的。

4.视图(view)

1.什么是视图?
站在不一样的角度去看数据。(同一张表的数据,经过不一样的角度去看待)
2.怎么建立视图?怎么删除视图?
create view myview as select empno,ename from emp;

drop view myview;
3.对视图进行增删改查,会影响到原表的数据。(经过视图影响到表数据的原表)能够对视图进行CRUD操做。

4.视图的做用?
能够隐藏表的实现细节,保密级别较高的系统,数据库之对外提供相关的视图,java程序员只对视图对象进行CRUD。

5.DBA命令

1.将数据库当中的数据导出。
在window窗口中:mysqldump xingkong>D:\ -uroot -p+加密码(导出整个 库)
在window窗口中:mysqldump xingkong t_student>D:\ -uroot -p+加密码(导出指定表)

2.导入数据。
create database +数据库
使用数据库
source 文件路径

3.建立用户
create user username IDENTIFIED BY ‘password’;
4.受权
5.撤销权限。

6.数据库设计三范式

1.什么是设计范式?
设计表的依据,按照这个三范式设计的表不会出现数据冗余。

2.三范式:
第一范式:任何一张表都应该有主键,而且每个字段原子性不可再分。

第二范式:在第一范式的基础上,全部非主键字段彻底依赖主键,不能产生部分依赖。
多对多?三张表,关系表里有两个外键
t_student学生表
在这里插入图片描述

第三范式:创建在第二范式基础之上,全部非主键字段直接依赖主键,不能产生传递依赖。

班级t_class
学生t_student
在这里插入图片描述
一对多?两张表,的表加外键。

注意:实际开发中以知足客户的需求为主,有的时候拿冗余换执行速度。

3.一对一怎么设计?
一对一设计及有两种方案:
1.主键共享(主键加外键
2.外键惟一(某字段外键加+unique)
用户登陆表。
用户详细信息表。
在这里插入图片描述

相关文章
相关标签/搜索