MySQL第五弹 之内外连接、索引特性、事物管理

内外连接 :

多表的连接分为内连接和外连接

内连接实际上利用where子句对两种表形成的笛卡儿积进行选择。之前的查询语句都是内连接。

内连接语法:

select  字段  from  [表名称]  inner   join  [表名称]   on  [连接条件]    [其余条件]

外连接分为左外连接和右外连接

联合查询时,左侧的表完全显示就是我们说的左外连接 : select [列名称]  from  [表名称] left   join  [表名称]   on  [连接条件]

联合查询时,右侧的表完全显示就是我们说的右外连接 : select  [列名称] from [表名称] right  join  [表名称] on [连接条件]

MySQL第五弹 之内外连接、索引特性、事物管理_第1张图片

 

索引:

常见索引分为:主键索引(primary key)  、唯一索引(unique) 、普通索引(index) 、全文索引(fulltext) : 解决中子文索引问题 

索引可提高数据库的性能,只要执行正确的索引创建语句,不用加内存、不用程序、也不用sql ,查询速度就可能提高成千上百倍。但是事物总有两面性,查询速度的提高是以插入、更新和删除的速度为代价的,这些操作,将会增加大量的IO。

索引最受欢迎的地方在于提高海量数据的检索速度。

主键索引primary key

创建主键索引: 设计了主键就默认设置了主键索引

 

主键索引特点:

一个表中,做多有一个主键索引,当然除复合主键

创建主键索引的列,它的值不能为null,并且不能重复

唯一索引unique

唯一索引特点:

一个表中,可以有多个唯一索引,查询效率高。

如果某一列建立唯一索引,必须保证这列不能有重复数据。

如果一个唯一索引指定为not null,等价于主键索引

 

普通索引index

创建表的同时指明索引列名称  create table  student ( id int ,name varchar(10) ,  index(name) );

create table  student ( id int ,name varchar(10))

创建完表之后指定某列为索引: alter table [表名称] add index(列名称)  

                                                         eg:alter table student add  index(name);

在某张表中创建一个索引 : create index [索引名]   on  [表名称](列名称)

                                     eg:  create index  index_name on student(name);

上面都是在一张包有学号和姓名的学生信息表中,以姓名的列为索引

特点:一个表中可以有多个普通索引。如果某列需要创建索引,但是该列有重复的值,我们就应该使用普通索引

 

全文索引的创建

当对文章字段或有大量文字的字段进行检索时,会使用全文索引。MYSQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MYISAM,而且默认的全文索引支持英文,不支持中文

全文索引的建立:

create table  blog(_id int ,_title varchar(255),_text  text   , fulltext(title,body) )engine=MYISAM;

使用explain工具可以查看选择语句是否使用了索引: explain  [选择查询语句] 

查询索引:

show keys from [表名]

show  index from [表名] 

desc  [表名]

 

删除索引:

删除主键索引 : alter table  [表名]  drop primary key

其他索引的删除: alter table  [表名]   drop  index [索引在的列名称]

                                 drop  index [索引所在的列名称]  on [表名]

 

事务管理

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。

开始一个事务:start  transaction

创建一个保存点: savepoint  [保存点名]

回到保存点 :      rollback to [保存点名]

事务操作注意事项:

如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用rollback (前提是事务还没有提交)

如果一个事务被提交了(commit),则不可以回退(rollback)

rollback to [保存点名] 可以选择回退到那个保存点

innoDB支持事务,MyISAM不支持事务

事务的隔离级别

当MySQL表被多个线程或者客户端开启各自事务操作数据库中的数据时,MySQL提供了一种机制,可以让不同的事务在操作数据时,具有隔离性,从而保证数据的一致性

隔离级别 脏读 不可重复读 幻读 加锁读
读未提交 read uncommited YES YES YES 不加锁
读已提交 read commited NO YES YES 不加锁
可重复读 repeatable read NO NO NO 不加锁
可串行化 serializable NO NO NO 加锁

设置事务的隔离级别:

   set session transaction    isolation  level [隔离级别];

查看当前的隔离级别 : select @@tx_isolation;

mysql 默认的隔离级别是可重复读,一般情况下不要修改

 

事务的ACID特性:

原子性:事务是应用中最小的执行单位。

一致性:事务执行的结果,必须使数据库从一个一致性,便到另一个一致性状态。当数据库质保函事务成功提交的结果时,数据库出于一致性状态。

隔离性:各个事务的执行互补干扰,任意一个事务的内部操作对其他并发事务都是隔离的。即,并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间互相影响

持久性:一个事务一旦被提交,它对数据库所做的改变都要记录到永久存储其中

 

注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!

 

你可能感兴趣的:(MySQL)