看了描述大概明白题主困惑是什么了。题主应该是误以为,由begin,增删改查语句,commit组成的才叫事务。其实一般这种叫事务块。我原来也有这种误解。而没有begin,end包围的单独的每条语句也都是事务(如果开了自动提交的话,而在很多数据库里默认都开,比如题主说的mysql)。再就是写冲突问题。并发写的时候,单机数据库一般就是加锁,像mysql,分布式的多会用乐观提交,先写,提交的时候发现冲突了再回滚。
https://www.jianshu.com/p/9457c88c52d1
在创建表的时候可以选择用哪个引擎:
create table xxx
(
...
)
ENGINE=InnoDB;
视图就是检索表的动态变量
磁盘IO是数据库的性能瓶颈
复制的搭建
数据的切分
MyISAM是mysql5.1及之前版本的默认引擎,很久未被更新。现在选用的都是innodb
数据库:物理操作系统文件或其他形式文件类型的集合。在mysql数据库中,数据库文件可以是frm、myd、myi、ibd结尾的文件。当使用ndb引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变。
实例:mysql数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。
这两个词有时可以互换使用,不过两者的概念完全不同。在mysql数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据实例使用的情况。
mysql被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多线程架构的)。这也就是说,mysql数据库实例在系统上的表现就是一个进程。
mysql由以下几部分组成:
连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲(Cache)组件
插件式存储引擎
物理文件
存储引擎是基于表的,而不是数据库。
mysql存储
看my.ini/my.cnf文件.的datadir
该文件名下面类似a.frm、a.MYD、a.MYI等就是数据库的文件
myisam innodb 区别(不同类型不能相互复制)
同大多数数据库一样,InnoDB有页的概念(也可以称为块),页是InnoDB磁盘管理的最小单位。
我们知道对于MyISAM引擎而言,数据文件和索引文件是分离的。通过索引查找到后,就得到了数据的物理地址,然后根据地址定位数据文件中的记录即可。这种方式也叫"非聚集索引"。
而对于Innodb引擎而言,数据文件本身是索引文件!通俗点说,叶子节点上,MyISAM存储的是记录的物理地址,而Innodb上存储的是数据内容,这种方式即"聚集索引"。
参考:
《mysql技术内幕(innodb存储引擎)》
暂时的学习路线是《MySQL必知必会》-〉《MySQL技术内幕》-〉《高性能MySQL》。
怎样看mysql性能
慢查询日志
mysql> show variables like '%slow%';
mysql> show global status like '%slow%';
连接数
mysql> show variables like 'max_connections';
进程使用情况
show global status like ‘Thread%’;
https://www.cnblogs.com/jackchen001/p/6964411.html
https://www.cnblogs.com/fjping0606/p/5821289.html
查询优化、索引优化、库表结构优化(Schema 与数据类型优化 )需要齐头并进,一个不落。
日志
mysql数据库常见的日志文件有:
错误日志(error log)
二进制日志(binlog)
慢查询日志(slow query log)
查询日志(log)