mysql的锁
概念:当一个会话操作一个表的时候,另一个会话也可以操作这个表,那么最终导致结果看谁操作的块一点谁生效,这个时候就需要锁的机制。当一个会话操作的时候,锁住这个表,直至操作完成。
锁的分类:
行锁:开销小、加锁块、不会出现死锁,锁定粒度大,发生锁冲突概率最高,并发度最低
表锁:开销大、加锁慢、会出现死锁、锁定粒度小、发生锁冲突概率最低、并发也最高
页锁:开销中等、加锁中等、会出现死锁、锁定粒度中等。并发中等
mysql事务
概念:mysql只有用来innoDB引擎或者表的才支持事务,事务是为了保证整个操作的一致性,要么执行成功,要么执行不成功。用来管理insert、update、delete
事务必须满足的四个条件:
1.原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2.一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
3.隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatableread)和串行化(Serializable)。
4.持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
实现事务处理的两种方法:
1.用BEGIN、ROLLBACK、COMMIT实现
BEGIN:开始一个事务
ROLLBACK:回滚事务
COMMIT:提交事务
2.用SET 来改变Mysql的自动提交模式
SET AUTOCOMMIT=0:禁止自动提交
SET AUTOCOMMIT=1:开启自动提交
mysql引擎
概述:数据库存储引擎是数据库底层软件组件,mysql分为三层。第一层面向连接,第二层是mysql核心,第三层就是存储引擎。存储引擎主要进行创建、查询 、
更新删除等操作。不同的存储引擎有不同的存储机制、索引技巧、锁定水平还有特定的功能。
存储引擎最小化单位是表,也就是可以根据不同的表用不同的存储引擎。所以存储引擎也叫“表类型”
mysql常见的三种存储引擎:
InnoDB、MyISAM、MEMORY
查看mysql支持的存储引擎:
SHOW ENGINES;(其中DEFAULE就是默认存储引擎)
查看某个表的存储引擎:
SHOW TABLE STATUS IN 数据库名 WHERE Name='表名'G
修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名;
更改默认的存储引擎:
永久修改:修改my.cnf,在配置文件里面增加参数default-storage-engine=引擎名,然后重启数据库服务。
临时修改: set default_storage_engine=InnoDB;
表空间:table space
由InnoDB管理的特有格式数据文件,内部可同时存储数据和索引。
InoDB介绍:
特性:
支持事务,有事务日志
ib_logfile0
ib_logfile1
支持外键约束
支持MVCC(多版本并发控制)
支持聚簇索引
聚簇索引之外的其他索引,通常称之为辅助索引
行级锁:间隙锁
支持使用辅助索引
支持自使用hash索引
支持热备份
两种模式:
共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M
每个表一个独有的格式定义文件:tb_name.frm
还有一个默认位于数据目录下的共享的表空间文件:ibdata# #表示一个数字
注意:查看数据目录:show global variables like
"%datadir%"
; 里面就有ibdata1文件
优点:方便整体管理
缺点:各存储间隙大
独立表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
每个表在数据库目录下存储两个文件
tb_name.frm
tb_name.ibd
优点:速度快点、可优化
缺点:单表过大不行的哦,比如超过100G
设置 独立表空间模式:在配置文件(my.cnf)中设置: innodb_file_per_table = ON
选择存储引擎:
是否需要事务
备份的类型的支持
崩溃后的恢复
特有的特性
mysql索引:
1.索引的作用:加快查询速度
2.索引的分类:
单列索引:个索引只包含一个列,一个表可以有多个单列索引
普通索引
唯一索引
主键索引
组合索引:一个组合索引包含两个或两个以上的列,
3.查看索引:
SHOW INDEX FROM 表名
SHOW KEYS FROM 表名
4.创建索引
创建索引可以在CREATE TABLE 时候直接创建,也可以后面通过CREATE INDEX来创建。也可以通过ALTER TABLE 为表增加索引
创建普通索引:
CREATE INDEX 索引名 ON 表名 (字段名(字段类型));
创建唯一索引:
ALTER TABLE 表名 ADD UNIQUE[索引名] (字段名(字段类型))
创建主键索引:
CREATE TABLE 表名(
字段1 字段类型 PRIMIKEY
);