1、MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workbench来新建一个端口号不同的服务器实例等),该架构类似于SQL Server和Windows版本的Oracle;
2、MySQL实例是线程和内存组成,实例才是真正用于操作数据库文件的(MySQL数据库是由一些列物理文件组成,类似于frm、MYD、MYI、ibd结尾的文件);
3、一般情况下一个实例操作一个或多个数据库(Oracle一个实例对应一个数据库);集群情况下多个实例操作一个或多个数据库。
在实例启动的时候MySQL会读取配置文件,类似于Oracle的spfile文件,不同的是Oracle如果找不到参数文件会启动失败,MySQL如果找不到配置文件则会按照默认参数设置启动实例。
MySQL中建立一个会话(session),不是和具体的数据库(database)相连接,而是跟某个实例(instance)建立会话(session,每个会话可以使用不同的用户身份)。
而一个实例(instance)可以操作多个数据库,故一个会话(session,在操作系统概念里,会话即是线程)可以操作一个实例上的多个数据库。
简单描述如下:instance >> database
所以当使用web应用的持久层连接Mysql,实际上是连接Mysql的实例,所以当Spring这种框架操作事务时,出现如下操作时,是可以做到跨库的事务的:
insert into t1 values (1,’测试’);
insert into db2.t2 values (1,’测试’);
db2是当前数据库实例中的另一个数据库名称。
连接(connection)是一个物理的概念,它指的是一个通过网络建立的客户端和专有服务器(Dedicated Server)或调度器(Shared Server)的一个网络连接。
会话(session)是一个逻辑的概念,它是存在于实例(instance)中。
创建一个连接(connection)实际上是在某个实例(instance,或者说是进程)中创建一个或多个线程(即多个session)。
关系:
connect就好比你接通对方,这时,connect就建立了,有没有通话,不管。双方进行通话,则session建立了,如果换人,则新的session建立,原session结束,类似的,可以在同一个connect上进行多个会话。最后,挂机,connect结束。
比如:使用客端连接数据库,这样你就可以执行很多个事务了
在数据库里的事务,如果在执行的SQL都是由会话发起的,哪怕是自动执行的JOB也是由系统会话发起的
比如RMAN备份,是可以创建多个线程可加快备份速度
而一个线程,在没结束当前事务是无法释放资源来执行第二个事务
事务(transaction):简单理解就是一个业务需求的最小处理单位。
会话(session):可以包含N个事务
一个会话中可以由多个事务。线程是操作系统概念。