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

内外连接 :

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

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

内连接语法:

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

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

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

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

 

索引:

常见索引分为:主键索引(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 uncommitedYESYESYES不加锁
读已提交 read commitedNOYESYES不加锁
可重复读 repeatable readNONONO不加锁
可串行化 serializableNONONO加锁

设置事务的隔离级别:

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

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

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

 

事务的ACID特性:

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

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

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

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

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值