一、事务和事务回滚
事务指一件事从开始发生到结束的整个过程
事务的作用 :确保数据一致性
1、事务和事务回滚的应用
a、mysql中默认sql语句会自动commit到数据库
show variables like "autocommit";
b、事务应用
1)开启事务
mysql >> start transaction;
mysql >>... SQL命令
## 此时autocommit被禁用,SQL命令不会对数据库中数据做修改
注:另外一种开启事务方法:mysql >> begin
2)终止事务
mysql >> commit; # 完成一系列sql操作
或者
mysql >> rollback; # 在进行sql操作过程中出现异常或错误
2、注意
事务和事务回滚只针对表记录操作 :增、删、改有效,对建库建表无效
二、存储引擎
1、定义
用来处理表的处理器
2、基本操作
a、查看所有的存储引擎
mysql>> show engines;
b、查看已有表的存储引擎
show create table 表名; # engine = ...
c、创建表时指定存储引擎
create table 表名(...)engine=mysiam;
d、修改表存储引擎
alter table 表名 engine=myisam;
3、工作中使用的存储引擎
innodb myisam
4、常用存储引擎特点
a、innodb特点
1)共享表空间
表名.frm 表结构
表名.ibd 表记录和索引信息
2)支持行级锁
b、myisam特点
1)独享表空间
表名.frm 表结构
表名.myd 表记录
表名.myi 索引信息
2)支持表级锁
c、memory存储引擎
memory: 表记录存储在内存中
表名.frm 表结构
d、如何决定使用哪种存储引擎
执行查询操作多的表使用myisam存储引擎(使用innodb浪费资源)
执行写操作比较多的表使用innodb存储引擎
5、锁
a、加锁的目的
解决客户端并发访问的冲突问题
b、锁类型
读锁(select)共享锁:
加读锁之后不能更改表中内容,但可以进行查询
写锁(insert、update、delete)互斥锁、排他锁
c、锁粒度
表级锁
行级锁
注:操作完成后会自动释放锁
6、如何更改表的默认存储引擎
a、sudo -i
b、cd /etc/mysql/mysql.conf.d/
c、cp mysqld.cnf mysqld.cnf.bak
d、vi mysqld.cnf
[mysqld]
default-storage-engine=myisam
e、/etc/init.d/mysql restart
三、MySQL调优
1、选择合适的存储引擎
经常用来读的表使用myisam存储引擎
其余的表都用innodb存储引擎
2、创建索引
在SELECT、WHERE、ORDER BY常涉及的字段建立索引
3、SQL语句优化(尽量避免全表扫描)
a、where条件判断尽量不使用 != ,否则放弃索引全表扫描c、尽量避免NULL值判断,否则会全表扫描
优化前:select id from t1 where id is null;
优化后:在 id 字段上设置默认值0,确保id字段没有NULL值
select id from t1 where id=0;
d、尽量避免用 or 来连接条件,否则会全表扫描
优化前:select id from t1 where id=10 or id=20;
优化后:
select id from t1 where id=10
union all
select id from t1 where id=20;
注:union all 用于连接显示在一起
e、模糊查询尽量避免使用前置%,否则会全表扫描
select name from t1 where name like "c%";
f、尽量避免使用in 和 not in,否则会全表扫描
优化前:select id from t1 where id in(1,2,3,4);
优化后:... where id between 1 and 4;
g、尽量避免使用select * ... ,用具体的字段代替*,不要返回用不到的任何字段