mysql的存储引擎

生产环境中建表,我们如何决定存储引擎的使用类型?

      对于查询操作较多的表,使用Myisam引擎较为合适,以节省系统资源.

      而,对于写操作相对较多的表,适合Innodb引擎,以解决并发性访问量大的问题.

什么是存储引擎?

       作为可插拔式的组件提供,mysql自带的功能程序,专属于表的处理器;不同的存储引擎有不同的动能和存储方式. 

       如,Mysql 5.0/5.1 存储引擎为MyISAM, 而Mysql 5.5/5.6 存储引擎为Innodb.

查看数据库可用的存储引擎:

       mysql> show engines;

       +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

        | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |

      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

      | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |

      | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |

      | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |

      | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |

      | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |

      | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |

      | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |

      | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |

      | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |

      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

     9 rows in set (0.01 sec)

那么,配置存储引擎有哪些方法?

1.建表时,手动指定存储引擎,如:

   mysql> create database db10;

   mysql> create table db10.t1(

    -> id int,name char(10))engine=myisam;     //建表时指定存储引擎为myisam

    Query OK, 0 rows affected (0.05 sec)

    mysql> show create table t1 \G;    //查看存储引擎

   *************************** 1. row ***************************

       Table: t1

      Create Table: CREATE TABLE `t1` (

      `id` int(11) DEFAULT NULL,

      `name` char(10) DEFAULT NULL

       ) ENGINE=MyISAM DEFAULT CHARSET=latin1     //显示存储引擎为MyISAM

      1 row in set (0.01 sec)

2.在数据库服务的主配置文件中修改存储引擎,如:

   #vim /etc/my.cnf

   [mysqld]

   default-storage-engine=myisam   //指定存储引擎

   # systemctl restart mysqld     //重启加载配置

3.对已建表的引擎做修改

   mysql>alter table 库名.表名 engine=引擎类型;

   如:mysql>alter table db10.t1 engine=myisam;

存储引擎有哪些特点?

      Myisam存储引擎支持表级锁;不支持事务,事务回滚,外键.

      Myisam的表文件表结构:表名.frm; 索引:表名.MYI; 数据:表名.MYD

      Innodb存储引擎: 支持行级锁定,支持事务,事务回滚,外键.

      Innodb的表文件:表名.frm和表名.idb.

      Innodb的日志文件:ibdata1,ib_logfile0,ib_logfile1

Mysql的锁机制有哪些?

    锁的力度:表级锁(整张表)与行级锁(单行)

    锁的类型:a.读锁(共享锁),支持并发性读 b.写锁(互斥,排它);独立的锁,上锁期间其它线程不能读和写.

    查看当前锁的状态

    Mysql>show status like "%table_lock%"'

    +-----------------------------------------+-------+

    | Variable_name                           | Value |

    +-----------------------------------------+-------+

    | Performance_schema_table_lock_stat_lost | 0     |

    | Table_locks_immediate                   | 88    |

    | Table_locks_waited                      | 0     |

   +-----------------------------------------+-------+

事务的特性(ACID),有哪些?

       Atomic原子性,事务的操作是一个整体,不可分割,要么全部成功,要么全部失败.

       Consitency一致性,事务操作的前后,表中的记录没有变化.

       Isolation隔离性,事务之间的操作是隔离不受彼此影响的.

       Durability永久性,数据一旦提交即不可更改.

测试永久性开两个相同的终端4.50,其中一个终端关闭autocommit.

       mysql> show variables like "autocommit";

       +---------------+-------+

       | Variable_name | Value |

      +---------------+-------+

      | autocommit    | ON    |

      +---------------+-------+

      1 row in set (0.00 sec)

      mysql> set autocommit=off;       //关闭自动提交功能

      mysql> show variables like "autocommit";

     +---------------+-------+

     | Variable_name | Value |

     +---------------+-------+

     | autocommit    | OFF   |

     +---------------+-------+

     1 row in set (0.00 sec)

    mysql> create table db10.a4(

    -> id int )engine=innodb;

    Query OK, 0 rows affected (0.37 sec)

    mysql> insert into db10.a4 values(200);

    mysql> insert into db10.a4 values(300);

    mysql> select * from db10.a4;  //在关闭了commit的终端可以查看到插入的数据,没有关闭commit终端却不能查看到提交的数据

    +------+

    | id   |

    +------+

    |  200 |

    |  300 |

    +------+

    2 rows in set (0.00 sec)

    mysql> commit;    //执行commit,在没有关闭commit的终端可以查看到插入的数据.

    mysql>rollback;  //回滚

结束.

转载于:https://www.cnblogs.com/liusingbon/p/11321058.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值