DataBases
简介
MariaDB
MySQL
数据类型
创建表
索引 index
主键 primary key
外键 foreign key
数据导入与导出
where条件判断
用户授权与密码
数据备份与恢复
数据热备
主从同步
读写分离
多实例
分库分表
集群-MHA
集群-PXC
存储引擎
本文档使用 MrDoc 发布
-
+
home page
存储引擎
InnoDB是MySQL的存储引擎,5.5版本取代MyISAM成为默认的存储引擎。InnoDB引擎的特性包括: 1.事务支持:InnoDB支持ACID(原子性、一致性、隔离性、持久性)事务。这意味着创建一个包含多个查询的事务,如果其中任何一个查询失败,那么整个事务都会回滚,这保证了数据的一致性。 2.行级锁定:InnoDB支持行级锁定,这提高了并发性能,因为在一个会话对某一行进行写操作时,其他会话可以对同一表的其他行进行读写操作。 3. 外键支持:InnoDB支持外键和相关的完整性约束,这有助于保持数据的参照完整性。 4. 崩溃恢复能力:InnoDB有一个内置的崩溃恢复机制,可以在系统崩溃后自动恢复到一致性状态。 5. MVCC:InnoDB支持多版本并发控制(MVCC),这是一种优化读取操作和避免读取锁定的技术,非常适合高并发的应用。 MyISAM是MySQL的默认存储引擎(直到5.5版本,后续版本默认引擎为InnoDB)。MyISAM的特点包括: 表级锁定:MyISAM在执行大部分写操作时会锁定整个表,这可能会影响并发性能。 不支持事务:这意味着MyISAM不适合处理需要高度一致性的应用。 全文索引:MyISAM支持全文索引,这在执行某些类型的搜索查询时非常有用。 压缩表:MyISAM允许表压缩,以节省磁盘空间。 修改默认的存储引擎 ```asp mysql -uroot -p'JCss%6!8' #登录 show engines; #查看当前数据库支持的存储引擎 create table db1.t2(id int)engine=innodb; #指定单个表的存储引擎 alter table db1.t3 engine=memory; #修改表的存储引擎 show create table db1.t2; #查看表的存储引擎 —————————————————————————————————————————————————————————————————————————————————————— vim /etc/my.cnf #修改主配置文件设置默认存储引擎 [mysqld] default-storage-engine=myisam #添加指定默认为myisam引擎 systemctl restart mysqld #重启数据库服务 —————————————————————————————————————————————————————————————————————————————————————— ls /var/lib/mysql/db1/t1* #查看库文件(innodb引擎) /var/lib/mysql/db1/t1.frm #表结构 /var/lib/mysql/db1/t1.ibd #数据+索引 —————————————————————————————————————————————————————————————————————————————————————— ls /var/lib/mysql/db1/t2* #查看库文件(myisam引擎) /var/lib/mysql/db1/t2.frm #表结构 /var/lib/mysql/db1/t2.MYD #数据 /var/lib/mysql/db1/t2.MYI #索引 —————————————————————————————————————————————————————————————————————————————————————— ls /var/lib/mysql/db1/t3* #查看库文件(memory引擎) /var/lib/mysql/db1/t3.frm #表结构 ``` MySQL的锁机制主要包括以下两种类型: 1. **表级锁定**:MySQL的MyISAM存储引擎使用表级锁定。它是最基本的锁策略,并且也是开销最小的策略。表级锁定有两种类型:表共享读锁和表独占写锁。这种锁机制的优点是开销小,锁定快,不会出现死锁;缺点是并发性能差,尤其是当有大量写操作时,读操作可能会被长时间阻塞。 2. **行级锁定**:MySQL的InnoDB存储引擎使用行级锁定。行级锁定只会锁定被操作的行,这样其他会话可以访问同一表中的其他行。行级锁定可以提高并发性能,但是它的开销比表级锁定要大,因为在处理每一行时都需要获取和释放锁。此外,行级锁定可能会导致死锁。 除了表级锁定和行级锁定,InnoDB还支持一种名为多版本并发控制(MVCC)的机制。MVCC允许多个用户同时访问同一行,每个用户看到的都是自己事务开始时的数据快照。这样,读操作不需要锁定,可以在不阻塞其他用户的情况下进行。 此外,MySQL还支持一种名为意向锁的机制,用于处理更复杂的锁定情况。意向锁是一种表级锁,用于告诉其他会话一个会话打算获取行级锁或表级锁。 在实际应用中,选择哪种锁机制取决于应用的具体需求,包括并发量、读写比例、数据一致性要求等因素。 锁粒度:行级锁、表级锁 锁类型:读锁(共享锁,支持并发度)、写锁(互斥锁/排他锁,独占锁,上锁期间其他线程不能毒镖或写表) 事务:一次数据访问从开始到断开的过程 事务回滚:在链接过程中出现失败或者错误恢复到出错之前的状态 事务日志文件:iddata1、ib_logfile0、ib_logfile1 ```asp show status like "%lock%"; #查看锁 ``` 事务(Transaction)是指一组数据库操作,这些操作要么全部成功执行,要么全部回滚到事务开始前的状态,具有以下几个特点: 1. **原子性(Atomicity)**:事务是一个原子操作单元,要么全部执行成功,要么全部回滚。如果事务中的任何一个操作失败,整个事务将被回滚到事务开始前的状态,保持数据的一致性。 2. **一致性(Consistency)**:事务执行前和执行后,数据库的完整性约束没有被破坏。事务将数据库从一个一致状态转换到另一个一致状态,即满足预设的业务规则和约束条件。 3. **隔离性(Isolation)**:事务的执行是相互隔离的,一个事务的操作不会被其他事务所干扰。事务的隔离性保证了并发执行的事务之间不会产生冲突,从而避免了脏读、不可重复读和幻读等问题。 4. **持久性(Durability)**:一旦事务提交成功,其对数据库的修改将永久保存,即使系统发生故障或重启,修改的数据也不会丢失。持久性通过将事务的结果写入物理存储介质(如磁盘)来实现。 事务的特点保证了数据库操作的可靠性和一致性。通过将一组操作作为一个事务来执行,可以确保数据的完整性,并提供了一种可靠的机制来处理并发访问和故障恢复。数据库管理系统(DBMS)提供了事务管理的支持,开发人员可以使用事务来保证数据库操作的正确性和可靠性。 测试隔离性和事务回滚 ```asp show variables like "autocommit"; #查看提交状态(状态为on开启啊) set autocommit=off; #关闭自动提交(此线程所有操作关闭自动提交) insert into db1.t1(id) values(100); #插入数据只在此链接中生效 rollback; #事务回滚(恢复到没有插入数据100的状态) commit; #手动提交数据(提交后其他链接都可以看到新增的数据) ```
done
May 14, 2024, 10:17 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password