一、mysql索引:提高数据库的性能(不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍千倍)索引会占用磁盘空间
CREATE INDEX 索引名 ON 数据表 (列名or字段名)
注意:对于创建的索引,只会对创建索引的字段提升速度,没有创建索引的字段,在很大的数据时,仍然很慢,不会提升速度;
1、索引的原理:(会形成一个索引的数据结构)比如:二叉树,B+树等
(没有索引时:查询语句会进行全表扫描)
代价:
1)、磁盘占用
2)、如果表添加了索引,对表进行dml(修改,删除,添加)操作会有影响,理由:每次对数据库进行更改后,都会对索引的数据结构进行维护,消耗时间
2、mysql索引的类型
1).主键索引,主键自动的为主索引(类型Primary key)
2).唯一索引(UNIQUE)
3).普通索引 (INDEX)
4).全文索引(FULLTEXT)[适用于MyISAM],开发中不使用此全文索引
开发中考虑使用:全文搜索框架Solr和 ElasticSearch (ES)
2、索引使用
1)、添加索引方式
如何选择
(1)如果某列的值,是不会重复的,则优先考虑使用unique索引,否则使用普通索引
2)查询表是否有索引
show indexs from ‘table表名‘
3)删除索引
drop index 索引名 on 表名
删除主键索引
4)、适合使用索引的列:
(1)、较频繁的作为查询条件字段应该创建索引
(2)、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件(可以理解为在索引创建数据结构时没有唯一的分支)
(3)、更新非常频繁的字段不适合创建索引
(4)、不会出现在where子句中字段不该创建索引
二、mysql事务
1、理解:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。
mysql数据库控制台事务的几个重要操作
事务细节讨论:
2、事务隔离级别介绍:Mysql隔离级别定义了事务与事务之间的的隔离程度
1):
脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读
不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。
幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。
2):查看当前mysql的隔离级别(isolation:隔离)
select @@tx_isolation
查看系统当前隔离级别
select @@global.tx_isolation
设置当前会话(连接数据库)的隔离级别:
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别
例:SET SESSION TRANSACTION ISOLATION LEVEL Repeattable read
设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
例:SET GLOBAL TRANSACTION ISOLATION LEVEL Repeattable read
mysql事务ACID
三、MySQL表类型和存储引擎
基本介绍:
1. MySQL的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM.
innoDB、Memory等。
2. MySQL 数据表主要支持六种类型,分别是:CSV、Memory.ARCHIVE.
MRG MYISAM、MYISAM、InnoBDB。
3.这六种又分为两类,一类是”事务安全型”(transaction-safe),比如:
InnoDB;其余都属于第二类,称为”非事务安全型"(non-transaction-safe)[mysiam和memory]。
查看所有的存储引擎:
show engines
选择表的存储引擎:
指令修改引擎
ALTER TABLE `t29` ENGINE=INNDB
四、视图
理解:
1、视图是一个虚拟表,其内容由查询定义。同真实的表一样。视图包含列,其数据来自对应的真实表(基表)
2、视图和基表关系的示意图,视图也有列,数据来自基表
3、通过视图可以修改基表数据,基表也会影响视图的数据
视图的基本使用:
1. create view视图名as select语句
2.alter view视图名as select语句
3. SHOW CREATE VIEW 视图名
4. drop view视图名1视图名2
视图使用的细节:
1、视图创建后,在数据库的对应文件中,只有一个与之对应的视图结构文件
2、视图的数据变化会影响到基表,基表的数据变化也会影响到视图
3、视图中可以再使用视图,数据仍然来自基表
使用视图的三个理由:
1.安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这
时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不能查看保密的字段。
2性能。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时,
数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。
3.灵活。如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。然而,很
多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。
五、Mysql管理
mysql中的用户,都存储在系统数据库mysql中 user表中
其中user表的重要字段说明:
1. host:允许登录的“位置”,localhost表示该用户只允许本机登录,也
可以指定ip地址,比如:192.168.1.100
2.user:用户名;
3. authentication string: 密码,是通过mysql的password()函数加密之后的密码
下图中的方法适用于8.0以下版本
8.0以上版本可参考:(要进行修改用户操作,需要有对应的权限才可以)
不同的数据库用户,操作的库和表不同:
给用户授权的基本语法:
回收用户授权:
权限生效指令:
创建用户权限的细节说明:
1.在创建用户的时候,如果不指定Host,则为%,%表示表示所有IP都有连接权限
create user XXX;
2你也可以这样指定
create user ‘xxx‘@‘192.168.1.%’表示 xxx用户在192.168.1.*的ip可以登录mysql
3.在删除用户的时候,如果host 不是%需要明确指定‘用户‘@‘host值‘