人工智能(mysql)—— mysql事务、存储引擎及调优

一、事务和事务回滚

        事务指一件事从开始发生到结束的整个过程
        事务的作用 :确保数据一致性

    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  *  ... ,用具体的字段代替*,不要返回用不到的任何字段

四、附录:目录

        人工智能(mysql)—— 目录汇总



版权声明:本文为qq_27297393原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。