数据库 200310

1. 两种常见的数据库引擎?分别具有什么特点?

InnoDB 和 MyISAM 是数据库最常见的两种存储引擎。

总结:InnoDB 支持事务,支持行锁(读写锁),适合频繁性修改操作和需要安全性的应用;MyISAM 不支持行锁,不支持事务,适合查询和插入的应用。因为行锁的读写锁只能适用于修改,插入和删除都是表锁。

  • 如果你的应用程序对查询性能要求较高,就要使用 MyISAM 了。MyISAM 的性能更优,占用的存储空间少
  • 如果你的应用程序一定要使用事务,毫无疑问你要选择 INNODB 引擎。但要注意,INNODB 的行级锁是有条件的。在 where
    条件没有使用主键时,照样会锁全表。比如 DELETE FROM mytable 这样的删除语句。
  • 现在一般都是选用 innodb 了,主要是 MyISAM 的全表锁,读写串行问题,并发效率锁表,效率低,MyISAM
    对于读写密集型应用一般是不会去选用的。

2. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?

一般情况下,我们创建的数据库表引擎是 InnoDB,如果新增一条记录(不重启 mysql 的情况下),这条记录的 id 是 8;但是如果重启(文中提到的)MySQL 的话,这条记录的 ID 是 6。因为 InnoDB 表只把自增主键的最大 ID 记录到内存中,所以重启数据库或者对表 OPTIMIZE 操作,都会使最大 ID 丢失。

但是,如果我们使用表的类型是 MylSAM,那么这条记录的 ID 就是 8。因为 MylSAM 表会把自增主键的最大 ID 记录到数据文件里面,重启 MYSQL 后,自增主键的最大 ID 也不会丢失。

注:如果在这 7 条记录里面删除的是中间的几个记录(比如删除的是 3,4 两条记录),重启 MySQL 数据库后,insert 一条记录后,ID 都是 8。因为内存或者数据库文件存储都是自增主键最大 ID

3. 什么是主从复制?什么是读写分离?

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

主从复制的过程:

  • 在每个事务更新数据完成之前,master 在二进制日志记录这些改变。写入二进制日志完成后,master 通知存储引擎提交事务。
  • Slave 将 master 的 binary log 复制到其中继日志。首先 slave 开始一个工作线程(I/O),I/O 线程在
    master 上打开一个普通的连接,然后开始 binlog dump process。binlog dump process 从
    master 的二进制日志中读取事件,如果已经跟上 master,它会睡眠并等待 master 产生新的事件,I/O
    线程将这些事件写入中继日志。
  • Sql slave thread(sql 从线程)处理该过程的最后一步,sql 线程从中继日志读取事件,并重放其中的事件而更新 slave
    数据,使其与 master 中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 os 缓存中,所以中继日志的开销很小。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值