精华内容
下载资源
问答
  • MySql的主从关系理解与配置

    千次阅读 2018-12-11 14:47:09
    个人理解: 为了读写分离,这样可以提高用户的体验,更是提高数据库的访问效率,主从搭建是2台以上的服务器进行的,1个主服务器用来写,剩下的从服务器用来读操作,写的只管写,读的只管读,各干各的,这不就是分离...

    问题:为什么要搭建这个主从关系?

    个人理解:

    1. 为了读写分离,这样可以提高用户的体验,更是提高数据库的访问效率,主从搭建是2台以上的服务器进行的,1个主服务器用来写,剩下的从服务器用来读操作,写的只管写,读的只管读,各干各的,这不就是分离开来了么,服务器从干两件事减压成干一件事,那可不得轻松喽。
    2. 在搭建主从关系的时候,还实现同步操作,在主服务器上写的内容会同步在从服务器上边,达到了备份的效果,能够防止数据的丢失吧。

    主从关系:

    在这里插入图片描述

    主从原理:

    在这里插入图片描述
    原理我还是大土话:就是将Master主服务器中的数据Binarylog文件(二进制文件)保存下来,之后由Slave的thread 的I/O 从服务器中的Binarylog文件去读回来,读会来再写入到自己的二进制文件下进行保存,最后在由thread的SQL读出来。

    实现步骤:

    1、先准备两台服务器
    Mysql主服务器:

    版本:mysql Ver 14.14 Distrib 5.7.20
    IP:192.168.168.226
    PORT:3306

    Mysql从服务器

    版本:mysql Ver 14.14 Distrib 5.7.20
    IP:192.168.168.227
    PORT:3306

    2、登录主服务器,执行如下命令:

    mysql -u root -p

    提示密码安全策略问题。
    执行如下命令:

    命令1:set global validate_password_policy=0;
    命令2:grant replication slave on . TO ‘backup’@‘从服务器IP地址’ identified by ‘密码’;
    命令3:flush privileges

    3、编辑主服务器的数据库配置文件信息my.cnf

    vi /etc/my.cnf

    添加如下信息:

    server-id=226
    log_bin=/var/log/mysql/mysql-bin.log
    read-only=0
    binlog-do-db=test
    binlog-ignore-db=mysql
    编辑完:按ESC 输入 :wq! 进行保存(有感叹号!!!)
    <这里的lower_case_table_names=1>这是为了将输入的表名都改为小写
    在这里插入图片描述

    4、登录从服务器,执行如下命令:

    编辑从服务器的数据库配置文件信息:my.cnf

    vi /etc/my.cnf

    添加如下信息

    server-id=227
    log_bin=/var/log/mysql/mysql-bin.log
    在这里插入图片描述

    5、重启主服务器

    命令:service mysqld restart

    提示如下信息:
    在这里插入图片描述

    6、修改:
    进入/var/log/文件夹下,新建文件mysql,进入mysql目录,新建文件mysql-bin.log文件,并赋予读写权限(mysql和mysql-bin.log)

    进入/var/log/文件夹下,新建文件mysql,进入mysql目录,新建文件mysql-bin.log文件,并赋予读写权限(mysql和mysql-bin.log)
    在这里插入图片描述

    7、登录主服务器进入mysql,查看master状态

    mysql>show master status\G;
    

    8、登录从服务器,设置主从关系
    登录mysql后执行的语句:

    mysql>change master to  master_host='主库的IP',master_user='backup',master_password='主库的库密码',master_log_file='mysql-bin.000001',master_log_pos=154;
    

    9、查看从服务器的主从关系状态

    mysql>show slave status\G;
    

    10、主服务器下执行

    /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

    11、从服务器下执行

    /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

    (如果主从库中不存在test库,则需要重新建库,然后重启,重新构建主从关系)

    12、查看从服务器的主从关系状态

    mysql>show slave status\G;
    

    当从服务器显示状态为就OK了:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    在这里插入图片描述

    遇到的问题:(MySQL同步故障:" Slave_SQL_Running:No" 解决办法)
    一般是事务回滚造成的:
    解决办法:

    mysql> stop slave ;
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    mysql> start slave ;
    

    使用示例:(就这种效果,在Linux01下test库中的student表添加数据自动在Linux02下创建)
    在这里插入图片描述

    展开全文
  • MySQL笔记】正确的理解MySQL的MVCC及实现原理

    万次阅读 多人点赞 2019-07-05 15:43:06
    MVCC多版本并发控制 前提概要 MVCC实现原理 MVCC相关问题 前提概要 什么是MVCC?...MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。...MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能...

    MVCC多版本并发控制


    如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里

    !首先声明,MySQL的测试环境是5.7

    • 前提概要
      • 什么是MVCC
      • 什么是当前读和快照读?
      • 当前读,快照读和MVCC的关系
    • MVCC实现原理
      • 隐式字段
      • undo日志
      • Read View(读视图)
      • 整体流程
    • MVCC相关问题
      • RR是如何在RC级的基础上解决不可重复读的?
      • RC,RR级别下的InnoDB快照读有什么不同?

    前提概要


    什么是MVCC?

    MVCC
    MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
    mvcc - @百度百科

    MVCCMySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读


    什么是当前读和快照读?

    在学习MVCC多版本并发控制之前,我们必须先了解一下,什么是MySQL InnoDB下的当前读快照读?

    • 当前读
      像select lock in share mode(共享锁), select for update ; update, insert ,delete(排他锁)这些操作都是一种当前读,为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁

    • 快照读
      不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本

    说白了MVCC就是为了实现读-写冲突不加锁,而这个读指的就是快照读, 而非当前读,当前读实际上是一种加锁的操作,是悲观锁的实现


    当前读,快照读和MVCC的关系

    • 准确的说,MVCC多版本并发控制指的是 “维持一个数据的多个版本,使得读写操作没有冲突” 这么一个概念。仅仅是一个理想概念
    • 而在MySQL中,实现这么一个MVCC理想概念,我们就需要MySQL提供具体的功能去实现它,而快照读就是MySQL为我们实现MVCC理想模型的其中一个具体非阻塞读功能。而相对而言,当前读就是悲观锁的具体功能实现
    • 要说的再细致一些,快照读本身也是一个抽象概念,再深入研究。MVCC模型在MySQL中的具体实现则是由 3个隐式字段undo日志Read View 等去完成的,具体可以看下面的MVCC实现原理

    MVCC能解决什么问题,好处是?

    数据库并发场景有三种,分别为:

    • 读-读:不存在任何问题,也不需要并发控制
    • 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读
    • 写-写:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失

    MVCC带来的好处是?
    多版本并发控制(MVCC)是一种用来解决读-写冲突无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。 所以MVCC可以为数据库解决以下问题

    • 在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能
    • 同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题

    小结一下咯
    总之,MVCC就是因为大牛们,不满意只让数据库采用悲观锁这样性能不佳的形式去解决读-写冲突问题,而提出的解决方案,所以在数据库中,因为有了MVCC,所以我们可以形成两个组合:

    • MVCC + 悲观锁
      MVCC解决读写冲突,悲观锁解决写写冲突
    • MVCC + 乐观锁
      MVCC解决读写冲突,乐观锁解决写写冲突

    这种组合的方式就可以最大程度的提高数据库并发性能,并解决读写冲突,和写写冲突导致的问题


    MVCC的实现原理


    MVCC的目的就是多版本并发控制,在数据库中的实现,就是为了解决读写冲突,它的实现原理主要是依赖记录中的 3个隐式字段undo日志Read View 来实现的。所以我们先来看看这个三个point的概念

    隐式字段

    每行记录除了我们自定义的字段外,还有数据库隐式定义的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段

    • DB_TRX_ID
      6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务ID
    • DB_ROLL_PTR
      7byte,回滚指针,指向这条记录的上一个版本(存储于rollback segment里)
    • DB_ROW_ID
      6byte,隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引
    • 实际还有一个删除flag隐藏字段, 既记录被更新或删除并不代表真的删除,而是删除flag变了

    在这里插入图片描述
    如上图,DB_ROW_ID是数据库默认为该行记录生成的唯一隐式主键,DB_TRX_ID是当前操作该记录的事务ID,而DB_ROLL_PTR是一个回滚指针,用于配合undo日志,指向上一个旧版本


    undo日志

    undo log主要分为两种:

    • insert undo log
      代表事务在insert新记录时产生的undo log, 只在事务回滚时需要,并且在事务提交后可以被立即丢弃
    • update undo log
      事务在进行updatedelete时产生的undo log; 不仅在事务回滚时需要,在快照读时也需要;所以不能随便删除,只有在快速读或事务回滚不涉及该日志时,对应的日志才会被purge线程统一清除

    purge

    • 从前面的分析可以看出,为了实现InnoDB的MVCC机制,更新或者删除操作都只是设置一下老记录的deleted_bit,并不真正将过时的记录删除。

    • 为了节省磁盘空间,InnoDB有专门的purge线程来清理deleted_bit为true的记录。为了不影响MVCC的正常工作,purge线程自己也维护了一个read view(这个read view相当于系统中最老活跃事务的read view);如果某个记录的deleted_bit为true,并且DB_TRX_ID相对于purge线程的read view可见,那么这条记录一定是可以被安全清除的。

    对MVCC有帮助的实质是update undo logundo log实际上就是存在rollback segment中旧记录链,它的执行流程如下:

    一、 比如一个有个事务插入persion表插入了一条新记录,记录如下,name为Jerry, age为24岁,隐式主键是1,事务ID回滚指针,我们假设为NULL

    二、 现在来了一个事务1对该记录的name做出了修改,改为Tom

    • 事务1修改该行(记录)数据时,数据库会先对该行加排他锁
    • 然后把该行数据拷贝到undo log中,作为旧记录,既在undo log中有当前行的拷贝副本
    • 拷贝完毕后,修改该行name为Tom,并且修改隐藏字段的事务ID为当前事务1的ID, 我们默认从1开始,之后递增,回滚指针指向拷贝到undo log的副本记录,既表示我的上一个版本就是它
    • 事务提交后,释放锁

    三、 又来了个事务2修改person表的同一个记录,将age修改为30岁

    • 事务2修改该行数据时,数据库也先为该行加锁
    • 然后把该行数据拷贝到undo log中,作为旧记录,发现该行记录已经有undo log了,那么最新的旧数据作为链表的表头,插在该行记录的undo log最前面
    • 修改该行age为30岁,并且修改隐藏字段的事务ID为当前事务2的ID, 那就是2,回滚指针指向刚刚拷贝到undo log的副本记录
    • 事务提交,释放锁

    从上面,我们就可以看出,不同事务或者相同事务的对同一记录的修改,会导致该记录的undo log成为一条记录版本线性表,既链表,undo log的链首就是最新的旧记录,链尾就是最早的旧记录(当然就像之前说的该undo log的节点可能是会purge线程清除掉,向图中的第一条insert undo log,其实在事务提交之后可能就被删除丢失了,不过这里为了演示,所以还放在这里


    Read View(读视图)

    什么是Read View?

    什么是Read View,说白了Read View就是事务进行快照读操作的时候生产的读视图(Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID(当每个事务开启时,都会被分配一个ID, 这个ID是递增的,所以最新的事务,ID值越大)

    所以我们知道 Read View主要是用来做可见性判断的, 即当我们某个事务执行快照读的时候,对该记录创建一个Read View读视图,把它比作条件用来判断当前事务能够看到哪个版本的数据,既可能是当前最新的数据,也有可能是该行记录的undo log里面的某个版本的数据。

    Read View遵循一个可见性算法,主要是将要被修改的数据的最新记录中的DB_TRX_ID(即当前事务ID)取出来,与系统当前其他活跃事务的ID去对比(由Read View维护),如果DB_TRX_ID跟Read View的属性做了某些比较,不符合可见性,那就通过DB_ROLL_PTR回滚指针去取出Undo Log中的DB_TRX_ID再比较,即遍历链表的DB_TRX_ID(从链首到链尾,即从最近的一次修改查起),直到找到满足特定条件的DB_TRX_ID, 那么这个DB_TRX_ID所在的旧记录就是当前事务能看见的最新老版本

    那么这个判断条件是什么呢?
    在这里插入图片描述
    我们这里盗窃@呵呵一笑百媚生一张源码图,如上,它是一段MySQL判断可见性的一段源码,即changes_visible方法(不完全哈,但能看出大致逻辑),该方法展示了我们拿DB_TRX_ID去跟Read View某些属性进行怎么样的比较

    在展示之前,我先简化一下Read View,我们可以把Read View简单的理解成有三个全局属性

    • trx_list(名字我随便取的)
      一个数值列表,用来维护Read View生成时刻系统正活跃的事务ID
    • up_limit_id
      记录trx_list列表中事务ID最小的ID
    • low_limit_id
      ReadView生成时刻系统尚未分配的下一个事务ID,也就是目前已出现过的事务ID的最大值+1
    • 首先比较DB_TRX_ID < up_limit_id, 如果小于,则当前事务能看到DB_TRX_ID 所在的记录,如果大于等于进入下一个判断
    • 接下来判断 DB_TRX_ID 大于等于 low_limit_id , 如果大于等于则代表DB_TRX_ID 所在的记录在Read View生成后才出现的,那对当前事务肯定不可见,如果小于则进入下一个判断
    • 判断DB_TRX_ID 是否在活跃事务之中,trx_list.contains(DB_TRX_ID),如果在,则代表我Read View生成时刻,你这个事务还在活跃,还没有Commit,你修改的数据,我当前事务也是看不见的;如果不在,则说明,你这个事务在Read View生成之前就已经Commit了,你修改的结果,我当前事务是能看见的

    整体流程

    我们在了解了隐式字段undo log, 以及Read View的概念之后,就可以来看看MVCC实现的整体流程是怎么样了

    整体的流程是怎么样的呢?我们可以模拟一下

    • 事务2对某行数据执行了快照读,数据库为该行数据生成一个Read View读视图,假设当前事务ID为2,此时还有事务1事务3在活跃中,事务4事务2快照读前一刻提交更新了,所以Read View记录了系统当前活跃事务1,3的ID,维护在一个列表上,假设我们称为trx_list
    事务1 事务2 事务3 事务4
    事务开始 事务开始 事务开始 事务开始
    修改且已提交
    进行中 快照读 进行中
    • Read View不仅仅会通过一个列表trx_list来维护事务2执行快照读那刻系统正活跃的事务ID,还会有两个属性up_limit_id记录trx_list列表中事务ID最小的ID),low_limit_id(记录trx_list列表中事务ID最大的ID,也有人说快照读那刻系统尚未分配的下一个事务ID也就是目前已出现过的事务ID的最大值+1,我更倾向于后者 >>>资料传送门 | 呵呵一笑百媚生的回答) ;所以在这里例子中up_limit_id就是1,low_limit_id就是4 + 1 = 5,trx_list集合的值是1,3,Read View如下图
    • 我们的例子中,只有事务4修改过该行记录,并在事务2执行快照读前,就提交了事务,所以当前该行当前数据的undo log如下图所示;我们的事务2在快照读该行记录的时候,就会拿该行记录的DB_TRX_ID去跟up_limit_id,low_limit_id活跃事务ID列表(trx_list)进行比较,判断当前事务2能看到该记录的版本是哪个。
    • 所以先拿该记录DB_TRX_ID字段记录的事务ID 4去跟Read View的的up_limit_id比较,看4是否小于up_limit_id(1),所以不符合条件,继续判断 4 是否大于等于 low_limit_id(5),也不符合条件,最后判断4是否处于trx_list中的活跃事务, 最后发现事务ID为4的事务不在当前活跃事务列表中, 符合可见性条件,所以事务4修改后提交的最新结果对事务2快照读时是可见的,所以事务2能读到的最新数据记录是事务4所提交的版本,而事务4提交的版本也是全局角度上最新的版本

    在这里插入图片描述

    • 也正是Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同

    MVCC相关问题


    RR是如何在RC级的基础上解决不可重复读的?

    当前读和快照读在RR级别下的区别:

    表1:

    事务A 事务B
    开启事务 开启事务
    快照读(无影响)查询金额为500 快照读查询金额为500
    更新金额为400
    提交事务
    select 快照读金额为500
    select lock in share mode当前读金额为400

    在上表的顺序下,事务B的在事务A提交修改后的快照读是旧版本数据,而当前读是实时新数据400

    表2:

    事务A 事务B
    开启事务 开启事务
    快照读(无影响)查询金额为500
    更新金额为400
    提交事务
    select 快照读金额为400
    select lock in share mode当前读金额为400

    而在表2这里的顺序中,事务B在事务A提交后的快照读和当前读都是实时的新数据400,这是为什么呢?

    • 这里与上表的唯一区别仅仅是表1的事务B在事务A修改金额前快照读过一次金额数据,而表2的事务B在事务A修改金额前没有进行过快照读。

    所以我们知道事务中快照读的结果是非常依赖该事务首次出现快照读的地方,即某个事务中首次出现快照读的地方非常关键,它有决定该事务后续快照读结果的能力

    我们这里测试的是更新,同时删除更新也是一样的,如果事务B的快照读是在事务A操作之后进行的,事务B的快照读也是能读取到最新的数据的


    RC,RR级别下的InnoDB快照读有什么不同?

    正是Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同

    • 在RR级别下的某个事务的对某条记录的第一次快照读会创建一个快照及Read View, 将当前系统活跃的其他事务记录起来,此后在调用快照读的时候,还是使用的是同一个Read View,所以只要当前事务在其他事务提交更新之前使用过快照读,那么之后的快照读使用的都是同一个Read View,所以对之后的修改不可见;
    • 即RR级别下,快照读生成Read View时,Read View会记录此时所有其他活动事务的快照,这些事务的修改对于当前事务都是不可见的。而早于Read View创建的事务所做的修改均是可见
    • 而在RC级别下的,事务中,每次快照读都会新生成一个快照和Read View, 这就是我们在RC级别下的事务中可以看到别的事务提交的更新的原因

    总之在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。


    MySQL系列


    参考资料


    展开全文
  • mysql中字符宽度与字节的关系理解

    千次阅读 2017-04-11 11:33:13
    mysql字符与字节的关系(适用于varchar、char、text)utf-8字符集下,MySQL中,如果设置varchar(2),插入时,汉字可以插入2个,一个汉字占3个字节,字母可以插入2个,一个字母占一个字节,utf-8编码下存储一个字符...

    mysql字符与字节的关系(适用于varchar、char、text)

    utf-8字符集下,MySQL中,如果设置varchar(2),插入时,汉字可以插入2个,一个汉字占3个字节,字母可以插入2个,一个字母占一个字节,utf-8编码下存储一个字符采取的是1~3个字节;

    形象的说就是这样的,现在有一个叫varchar的盒子,我们定义有2个格子(mysql中宽度的概念),它能装2个东西,在utf-8的编码下,一个格子是可以存1~3个字节,现在有一个叫字母(ht)和一个叫汉字(测试)的家伙,都想放进了格子,这时候只能放下一个也么放两个字节的字母,要么放6个字节的汉字。不管谁放进去格子数都是2,存储字节数是变化的,2个字母就是两个字节,2个汉字就是6个字节
    注:这里的varchar(2)中2在mysql4以后定义为字符宽度,之前版本为字节数

    扩展:mysql与oracle中varchar与varchar2区别

    mysql中varchar(6)代表可以存放6个汉字,6个字母,或6个数字。
    oracle中varchar2(6)代表可以中存放6个字节。即oracle中varchar2的长度代表字节数而不是字符数。
    mysql中一个汉字占三个字节,Oracle中一个汉字占两个字节。

    展开全文
  • MySQL_之间的关系

    千次阅读 2020-06-30 11:38:11
    例子:用户(姓名,性别),资料(住址),一名用户只能包含资料中的一行数据,一对一的关系,也可直接理解成一张 用户(user) 资料(info) uid是info的外键,即为user的主键 1对1的关系表,可用...

    概述

    表与表之间的关系有三种:一对一、一对多(多对一)、多对多

    一对一

    例子:用户表(姓名,性别),资料表(住址),一名用户只能包含资料表中的一行数据,一对一的关系,也可直接理解成一张表

    用户表(user)

    在这里插入图片描述

    资料表(info)

    • uid是info表的外键,即为user表的主键
      在这里插入图片描述
      1对1的关系表,可用将2个表合并成1个表进行存储

    合成单表

    在这里插入图片描述

    一对多

    列子:用户表(user),订单表(order),一个用户可以有多个订单数据

    用户表(user)

    使用1对1例子中的用户表

    订单表(order)

    • uid:用户表中的id主键,在订单表称外键
      在这里插入图片描述

    建表原则

    为了保证数据的有效性和完整性,添加外键约束,在多表的一方添加外键约束

    alter table 多表名称 add foreign key (外键名称) references 一表名称(主键);
    

    多对多

    多对多的关系表中,我们一般引入一张中间表,在中间表中存放两张表的主键,一般会将这两个主键设置成中间表的联合主键,将多对多拆分成两个一对多的关系,为了保证数据的有效性和完整性,在中间表上添加两个外键约束即可

    alter table op add foreign key(oid) references orders(id);
    alter table op add  foreign key (pid) references products(id);
    
    展开全文
  • mysql游标理解

    千次阅读 2018-03-27 14:14:00
    一、MySQL游标的概念1、游标介绍MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解。有数据缓冲的思想:游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的...
  • 首先建立如下: 1、查询目标:查出地址为“成都”的所有教师名字   ...2、使用连接查询,显示所有教师的信息对应的课程信息,语句...可以这样理解先查询所有 得到的如下 再select选择想要的字段 ...
  • MySQL 性能优化》之理解 MySQL 体系结构

    万次阅读 多人点赞 2020-02-10 10:40:03
    本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
  • 为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确,大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正回答 MySQL 为什么...
  • Mysql关系数据库之关系模式

    千次阅读 2017-10-07 22:20:45
    2、模式:可以理解为就是 3、没模式:可以理解为就是存储文件,例如Mysql的.frm文件。是对数据的物理结构和存储方式的描述,例如:数据记录如何存储、是顺序还是安装索引,索引用什么方式组织等。
  • 本人首次使用MySQL的浅显理解

    千次阅读 2020-01-12 16:42:58
    MySQL是什么 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是...个人理解MySQL的基本功能的使用方...
  • mysql checkpoint理解

    千次阅读 2013-06-02 16:44:23
    mysql的doc并没有深入介绍checkpoint,本文主要对网上两篇文章阅读加上自己的理解,描述一下transaction log(redo log)和checkpoint之间的关系。 Innodb实现了Fuzzy Checkpoint和Sharp Checkpoint的机制,但在...
  • 所谓关系数据库(Relational database)是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 现实世界中的各种实体以及实体之间的各种联系均用关系模型表示。现如今虽然对此模型...
  • MySQL中主与副的区别,级联操作的运用 划重点: 1 被约束的称为副,约束别人的称为主,外键设置在副上的。 2 主被参考的字段通常都设置为主键 3 当有外键约束的时候,添加数据的顺序:先加主...
  • 理解MySQL架构

    千次阅读 2019-03-28 17:09:49
    本文为翻译的文章,作者Rathish Kumar,原文: ...对于IT从业人士来说,世界上最流行的开源数据库系统...有很多原因促成了MySQL在全世界的普及,但其中一个主要原因是它的架构,尽管有很多大玩家,比如Oracle,SQL Serv...
  • Mysql各种超时时间理解

    千次阅读 2018-07-26 19:54:59
    笔者最近做一个项目被mysql驱动包的的超时设置给坑了,起因就是因为没设置好connection timeout 和socket timeout,导致线程全部阻塞等待,机器线程全挂起,也无法处理新的其它请求,所以做了下面一些总结。...
  • 一对一关系一对一的表关系: 例如:qq和qq的详尽信息 建立外键的时候 如果明确主从关系? 被引用的是主,外键在从中建立 关联主12345实现代码如下: CREATE TABLE qq( qqid int PRIMARY KEY, password ...
  • 个人对于MySQL理解

    千次阅读 2018-08-20 13:24:45
    MySql是由MySql AB公司开发的一个中小型的关系型数据库管理系统。由于它拥有的一些特点,例如性能高、成本低、可靠性好,现阶段已经成为了最流行的开源数据库。MySql依然遵循GPL开源协议,全部的源代码(除了一些...
  • 深入理解 Mysql

    千次阅读 多人点赞 2017-08-19 21:54:03
    本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。第一章 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不...
  • 深入理解Mysql——锁、事务与并发控制

    万次阅读 多人点赞 2016-05-23 00:21:00
    深入理解Mysql——schema设计与大alter操作 mysql explain-output 译文 本文对锁、事务、并发控制做一个总结,看了网上很多文章,描述非常不准确。如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑...
  • MySQL联结

    千次阅读 2014-07-18 23:30:09
    理解关系表如下,假如由同一供应商生产的多种物品,在数据库中需要存储产品信息,而在产品信息的这一行不存储供应商信息,因为这些产品的供应商是同一个,所以在产品信息这一行里记录一个唯一的供应商id就可以,供应...
  • 从《MySQL必知必会》中对MySQL理解

    千次阅读 2016-05-02 13:41:19
    MySQL是一个开源的DBMS,是目前主流的关系型数据库DBMS之一。在《MySQL必知必会》中,作者通过简单实用的订单实例简而明要地介绍了MySQL,这里梳理一下对MySQL理解。 查询 单个table中的查询 检索+过滤+排序 ...
  • mysql详解

    千次阅读 2016-06-17 09:50:35
    为了给高并发情况下的MySQL进行更好的优化,有必要了解一下mysql查询更新时的锁机制。 一、概述 MySQL有三种锁的级别:页级、级、行级。 MyISAM和MEMORY存储引擎采用的是级锁(table-level locking);BDB...
  • 正确的理解MySQL的事务和隔离级别
  • 文章目录内容简介MySQL数据类型数值类型(整数类型)数值类型(小数类型)字符串类型日期类型复合类型(包括enum类型和set类型)二进制类型选择合适的数据类型创建 内容简介 本章详细讲解《三国志》数据库各个的...
  • 本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系!准备:首先我们创建一列sex。再为部分行设置好值0(女)或者1(男);delete from stud where age=26; 删除年龄为26的行。 ...
  • MySQL事务一致性理解

    千次阅读 2018-08-06 20:23:28
    MySQL事务一致性理解 一致性是指数据处于一种语义上的有意义且正确的状态。一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。因为这些中间状态,是一个过渡状态,...
  • 详解php与mysql关系

    万次阅读 多人点赞 2016-11-11 05:43:03
    通过本章你能够学到什么? 1、对数据库有一个更为直观的了解。 ... 这篇文章的特点 1、在学习过程中碰到的很多问题,我都记录下来,在这篇... 2、有图有真相,让你能够更容易理解。 3、绝不废话。 第一部分:我的应
  • 深入理解MySQL索引之B+Tree

    万次阅读 多人点赞 2019-01-13 21:17:25
    如上图中,如果现在有一条sql语句 select * from teacher where id = 101,如果没有索引的条件下,我们要找到这条记录,我们就需要就行全扫描,匹配id = 101的数据。如果有了索引,我们就可以快速...
  • mysql数据库对象关系映射

    千次阅读 2017-07-15 23:47:49
    mysql数据库对象关系映射 ...关系:可以理解为数据库的   c.映射:这是因为java中的数据的类型与数据库的数据类型是有些不同的,如何将java中的类型的数据用数据库中的数据类型来存储起来,这
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    数据库三大范式是什么mysql有关权限的都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,920
精华内容 57,568
关键字:

mysql表关系的理解

mysql 订阅