脚本宝典收集整理的这篇文章主要介绍了MySQL学习一条龙,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
MySQL安装和配置
图形化工具Navicat安装和使用
数据库的创建和管理
表的创建和管理
数据完整性约束
数据库设计和规范化
数据操作
数据查询
数据视图
MySQL索引
事务
MySQL存储引擎
MySQL用户管理
看视频教程就🆗了
1.创建数据库:create database 数据库名;
2.使用指定数据库:use 数据库名;
3.查看所有数据库:show databases;
4.查看当前使用数据库:select database();
5.删除数据库:drop database数据库名;
1.创建表:create table 表名(字段名1 数据类型,字段名2 数据类型……);
2.查看当前数据库所有表:show tables;
3.导入表:souce+sql文件路径;(得先创建数据库)
4.删除表:drop table 表名; drop table if exists 表名;(先判断表是否存在,存在就删除);
5.查询所有字段:select * From 表名;(*表示所有字段)
表的列类型
累了
内容很多累了
第一范式:列不可再分
1.每一列属性都是不可再分的属性值,确保每一列的原子性
2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
第二范式:属性完全依赖于主键
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键
第三范式:属性不依赖于其它非主属性 属性直接依赖于主键
数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。
数据插入
1.插入一行数据:insert into 表名(字段名1,字段名2,字段名3…) values(值1,值2,值3…);
2.插入多行数据:insert into 表名(字段名1,字段名2,字段名3…) values(值1,值2,值3…),(值1,值2,值3…);
3.不加字段名表示按字段名顺序插入。
数据修改
update 表名 set 字段名1 = 值1,字段名2 = 值2… where 条件;
注意:不加条件会修改掉整张表的数据
delete from 表名 where 条件;
注意:不加条件会删除掉整张表的数据
快速删除表中数据:truncate table 表名;(删除效率高)
单表查询
1.查询表中字段下面的数据:select 字段名1,字段名2…from 表名;
2.条件查询:select 字段名1,字段名2…from 表名 where 条件;
3.查询时字段可以进行数学运算:select 字段名1*字段名2 from 表名 where 条件;
4.查询两值之间:select 字段名1,字段名2…from 表名 where 字段1 between A and B;
5.查询条件是某个值为空时,不能用字段名=null,要用字段名 is null
6.and和or查询:select 字段名1,字段名2…from 表名 where 条件1 and 条件2;(注意,条件2字段名不能少)
7.in和not in查询:select 字段名1,字段名2…from 表名 where 字段 in (值1,值2);表示包含值1和值2的数据
8.like模糊查询:
(1)’%字符%’,表示含有这个字符。
(2)’%字符’,表示以这个字符结尾。
(3)’字符%’,表示以这个字符开头。
(4)’%_A%’,表示第二个字符是A(_表示一个任意字符)
(5)’%_%’,表示含有下划线
9.把相应的数据进行查询后修改
select 字段名1,
case
when 字段名2 = '在馆' then '1'
when 字段名2 = '借出' then '0'
when 库存状态 = '丢失' then '-1'
end as 重命名
from 表名;
10.单行处理函数:lower转换小写,upPEr转换大写,substr取子串,concat字符串拼接,length取长度,frim去空格,round四舍五入。(语法自己查吧)
多表查询
1.连接查询(又称多表查询)分类:内连接有等值连接,非等值连接,自连接。 外连接有左连接和右连接。
2.等值连接:找表之间相等的字段作为where条件。例如:
select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;(1.表名后面接一个字母表示重命名(中间的as可以省略),主要是简化代码。2. e.字段名表示哪一个表中的字段,这样写有助于提高检索效率。3.用On来表示等值连接这是SQL99语法,主要是为了区分进一步检索时在后面添加的where条件)
3.非等值连接:就是连接条件不是一个等值关系
4.自连接:一张表连接自己,把自己看成两个表。例如:select a.ename,b.ename from emp a join emp b where条件;
5.外连接:查询两张表条件匹配的数据之外,额外查询出其中一个表条件不匹配的数据,不匹配的数据会用null表示。(左右连接可以相互转换)例如:
select e.ename,d.dname from emp e right join dept d where条件;
分类汇总与排序
1.分组函数(多行处理函数):count(计数),sum(求和),avg(平均值),;max(最大值),min(最小值)。基本语法:select sum(字段名)……
注意事项:(1)分组函数自动忽略null的数据,例如你用count统计有多少行时,null的数据行不被计算进去
(2)分组函数不能直接使用在where子句中
2.分组查询:把字段名下各个相同的数据进行分组
语法:select…from…group by 字段名;(group by可接多个字段,表示联合分组)
3.having数据过滤:与group by联合使用。例如:select…from…group by 字段名 having max(工资) > 1000;它可以接分组函数,表示查询每个组中最大工资大于1000的数据。当然也可以用where进行过滤后再分组
4.distinct(去除查询结果中的重复记录),语法:select distinct 字段名1,字段名2…(多个字段名表示联合去重)
5.order by排序:order by 字段名 asc/desc;(默认是升序可以省略asc,desc表示降序,order by也可以加多个字段,最前的字段起主导,只有当前面的字段因数据相同无法排序时才会按下一个字段排)
6.limIT取出查询结果的一部分,语法limit startIndex(起始下标,0开始),length(长度);例如:
select…from…order by…limit 5;表示取前5条数据。
而分页查询,每页显示pageSize条数据,第pageNo页:limit(pageNo-1)*pageSize,pageSize
7.union:将两个查询结果合并,select…… union select……;合并并且去除重复数据行,两个select语句查询字段名要相对应。
子查询
1.where子查询:在where子句中嵌套select语句。经典案例:查最低工资大于3000的员工(单表)
select * from 表名 where sal > (select min(sal) from 表名);
where子查询在要用到多个表时也可以用连接查询查出一样的结果,不过在要查的字段名都在一个表时可以用where子查询吧(其实连接查询更快,这样是调优的一种方式)
2.from子查询:将子查询的查询结果当作一张临时表。
案例:找出每个岗位的平均工资的薪资等级(工资和薪资等级不在同一个表)
思路:1.找出每个岗位的平均工资(按照岗位分组求平均值)
select job,avg(sal) from emp group by jop;
2.把上面的查询结果当成临时表
select t.*,s.grade
from (select job,avg(sal) as avgsal from emp group by jop)t
join salgrade s
on t.avg(sal) between s.losal and s.hisal;//一定要给分组函数后的字段起别名
join也可以接临时表
3.select子查询(感觉没必要掌握)
查询关键字语法顺序和执行顺序
1.语法书写顺序:select…from…where…group by…order by…
2.关键字执行顺序:1.fromà 2.where à3.group byà 4.selectà 5.order by(这其实就是分组函数不能直接写在where子句中的原因)
基本概念
视图是一个虚拟表,是从数据库中一个或多个表中映射出来的表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变,对视图进行操作也会影响到原表数据。
视图基本操作
1.创建视图:create view 视图名as select语句;
2.删除视图:drop view 视图名;
3.修改视图,即从新定义:alter view 视图名 as select语句;
4.查看创建视图时所用的指令:SHOW CREATE VIEW 视图名;
5.其他操作和表操作一样
视图的应用
1.安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样用户就可以查询自己需要的字段,不能查看保密的字段。
2.性能。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时,数据库查询通常会用到连接join。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用join查询数据。
3.灵活。如果系统中有一张旧的表,这张表由于设计的问题即将被废弃。然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样就可以少做很多改动,也达到了升级数据表的目的。
基本概念
索引相当于一本书的目录,当数据库的数据量很大时,创建索引能加快检索速度,提高效率。索引有两种类型,即B-树索引和哈希索引。不同的存储引擎采用的索引类型等会有所不同。
索引分类
1.单一索引:一个字段上添加索引
2.复合索引:两个字段或更多的字段组合添加的索引
3.主键索引:主键上添加索引
4.唯一索引:具有unique约束的字段上添加的索引
索引的使用
1.创建索引:create index 索引名 on 表名(字段名),例如:create index emp_ename_index on emp(ename);
2.删除索引:drop index emp_ename_index on emp;
3.查看SQL语句是否使用了索引:explain+select语句。例子:explain select * from 表名 where 字段名='xxx';
索引失效
1.select * from emp where ename like '%T';(以%开头是不会走索引)
2.使用or的时候会失效,要用的话or两边的字段都得有索引
3.使用复合索引的时候,没有使用左侧的列查找,索引失效
例子:create index emp_jop_sal_index on emp(job,sal);
select * from emp where job='manager';(用索引)
select * from emp where sal=800;(索引失效)
4.在where当中索引列参加了运算,索引失效,例如where sal+1=800;
5. 在where当中索引列使用了函数
注意事项
1. 主键和unique字段会自动添加索引
2. 不要随便添加索引,索引需要维护。索引是为了提高查询效率。(数据量大的时候使用)
3. 唯一性比较弱的字段上添加索引用处不大。
4. 索引底层原理是(平衡二叉树)甚至更复杂
事务概念
一个事务其实就是一个完整的业务逻辑,只有增删改三个语句和事务有关。事务本质上其实就是DML语句同时成功,同时失败。
事务是怎么做到多条DML语句同时成功或同时失败的呢
1.InnoDB存储引擎提供一组用来记录事务性活动的日志文件,在执行事务的过程中,每一条DML语句的操作都会被记录到“事务性活动的日志文件”中。
2.在执行事务的过程中我们可以提交事务,也可以回滚事务。
3.提交事务即清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。提交事务标志着事务的结束。并且是一种全部成功的结束。
4.回滚事务即将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件。回滚事务标志着事务结束。并且是一种全部失败的结束。
事务特性
A原子性:说明事务是最小的工作单元,不可再分。
B一致性:所有事务要求,在同一个事务当中,所有的操作必须同时成功或同时失败,以保证数据的一致性
C隔离性:A事务和B事务之间具有一定的隔离。
D持久性:事务最终结束的一个保障。事务提交,就相当于没有保存到硬盘上的数据保存到硬盘上
事务隔离级别
2.事务隔离级别:
(1)读未提交:read uncommitted(最低的隔离级别),事务A可以读取到事务B未提交的数据(真实的)
这样出现的问题是:脏读现象。这种隔离级别一般的是理论上的,大多数大都是二档起步
(2)读已提交:read committed,事务A只能读取到事务B提交之后的数据
这样出现的问题是:解决了脏读,但是不可重复读取数据
(3)可重复读:repeatable read,事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变
这样出现的问题是:每次读取到的数据都是幻象,不够真实。(MySQL默认级别)
(4)序列化:serializable(最高的隔离级别),表示事务排队,不能并发。效率最低。
事务基本操作
基本概念
存储引擎是一个存储组织数据的方式。不同的存储引擎,表存储数据的方式不同。存储引擎是MySQL特有的一个概念。
常用存储引擎
1.MySQL默认存储引擎InnoDB:
(1)重量级存储引擎,最大的特点是支持事务。支持数据库崩溃后自动恢复,安全性高
(2)每个InnoDB表在数据库目录中以.frm格式文件表示
(3)InnoDB表空间tablespace被用于存储表的内容
(4)支持外键及引用的完整性,包括数据联合删除和更新
(5)多版本和行级锁定
优点:安全性高
2.MyISAM存储引擎:
(1)它使用散个文件表示每个表,格式文件存储表结构的定义(mytable.frm),数据文件存储表行的内容(mytable.MYD),索引文件存储表上的索引(mytable.MYI)
(2)MyISAM存储引擎的特点是可被转换为压缩、只读表来节省空间
优点:节省空间
3.MEMORY存储引擎:
(1)使用这种引擎的表,其数据存储在内存中,且行的长度固定,这使得MEMORY存储引擎非常快
(2)每个表在数据库目录中以.frm格式文件表示
(3)表数据及索引存储在内存中,查询数据快
(4)表级锁机制
(5)不能包含TEXT或BLOB字段
优点:查询效率最高,不需要和硬盘交互。 缺点:不安全,关机之后数据消失。
自己查吧
以上是脚本宝典为你收集整理的MySQL学习一条龙全部内容,希望文章能够帮你解决MySQL学习一条龙所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。