mysql 存储引擎
1 数据库存储引擎
定义:mysql的存储引擎是mysql体系架构中的重要组成部分,也是mysql体系结构的核心,插件式的存储引擎更是区别于其他数据库的重要特征。它处于mysql体系架构中server端底层,是底层物理结构的实现,用于将数据以各种不同的技术方式存储到文件或内存中,不同的存储引擎具备不同的存储机制、索引技巧和锁定水平。常见的存储引擎有InnoDB、MyISAM、Memory、Archive等,根据不同的应用来选择对应的存储引擎。
2 概念介绍
A 事务。它是一组原子性的SQL语句或者说是一个独立的工作单元,如果数据库引擎能够成功对数据库应用这组SQL语句,那么久执行,如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么执行失败。
B 无论何时,只要有多个SQL需要同一时刻修改数据库,都会产生并发控制的问题。在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决。这两种锁久时共享锁和排他锁,也叫读锁和写锁。读锁时共享的,即互相不阻塞的,多个客户在同一时刻可以读取同一资源,互不干扰。写锁时排他的,即一个写锁或阻塞其他的写锁和读锁,只有这样,才能确保给定时间内,只有一个用户能执行写入,防止其他用户读取正在写入的同一资源。写锁优先级高于读锁。
C 行锁和表锁。实际数据库系统中每时每刻都在发生锁定,锁也是有粒度的,提高共享资源并发行的方式就是让锁更有选择性,尽管只锁定需要修改的部分数据,而不是所有的资源,因此要进行精确的锁定。但是由于加锁也需要消耗资源,得锁、检查锁、释放锁等,都会增加系统开销。所谓的锁策略就是要在锁的开销和数据的安全性之间寻求平衡,这种平衡也会影响性能。
最常见的两种重要的锁策略是表锁和行锁。表锁是开销最小的策略,会锁定整张表,用户对表做写操作时,要先获得写锁,这会阻塞其他用户对该表的所有读写操作。没有写锁时,其他读取用户才能获得读锁,读锁之间是不相互阻塞的。行锁是以最大程度支持并发处理,但也带来了最大的锁开销,它只对指定的记录加锁,其他进程还是可以对同一表中的其他记录进行操作。表级锁速度快,但冲突多, 行级锁冲突少,但速度慢。
3 存储引擎的相关操作。
A 查看存储引擎:show engines;/SHOW VARIABLES LIKE 'have%';
B 查询默认存储引擎: SHOW VARIABLES LIKE 'storage_engine%';
C 修改默认引擎: 通过修改/etc/mysql/my.cnf 中[mysqld]组中的default-storage-engine参数。例如想设置默认存储引擎为MyISAM,则需要成default-storage-engine=MyISAM,然后重启mysql
4 存储引擎的选择

浙公网安备 33010602011771号