MySQL常见概念

MySQL常见概念

1、存储引擎 MyISAM 和 InnoDB区别

  1. InnoDB支持事务,MyISAM不支持。
  2. MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。
  3. InnoDB支持外键,MyISAM不支持。
  4. 从MySQL5.5.5以后,InnoDB是默认引擎。
  5. MyISAM支持全文类型索引,而InnoDB不支持全文索引。
  6. InnoDB中不保存表的总行数,select count() from table时,InnoDB需要扫描整个表计算有多少行,但MyISAM只需简单读出保存好的总行数即可。注:当count()语句包含where条件时MyISAM也需扫描整个表。
  7. 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。
  8. 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。MyisAM使用delete语句删除后并不会立刻清理磁盘空间,需要定时清理,命令:OPTIMIZE table dept;
  9. InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’)
  10. 现在一般都选用InnoDB,主要是MyISAM的全表锁,读写串行问题,并发效率锁表,效率低,MyISAM对于读写密集型应用一般是不会去选用的。
  11. 应用场景:
    • MyISAM不支持事务处理等高级功能,但它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
    • InnoDB用于需要事务处理的应用程序,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

2、CHAR和VARCHAR的区别

Char固定长度 ,Varchar可变长度 ;
Char如果存入数据的实际长度比指定长度要小 会补空格至指定长度 如果存入的数据的实际长度大于指定长度 低版本会被截取 高版本会报错;
Varchar类型如果存入的数据的实际长度比指定的长度小 会缩短到实际长度 如果存入 数据的实际长度大于指定长度 低版本会被截取 高版本会报错;
Char 会浪费更多的存储空间 而Varchar不会 ;
Char效率会更高 Varchar 效率偏低 ;

  1. Char和Varchar在指定时必须要制定后面的数字

3、Mysql中的锁类型

  1. MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁
  2. 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低
  3. 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高

4、delete、drop、truncate区别

  • truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
  • 删除数据的速度**,**drop> truncate > delete
  • delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。
  • 使用场合:
    • 当你不再需要该表时, 用 drop;
    • 当你仍要保留该表,但要删除所有记录时, 用 truncate;
    • 当你要删除部分记录时(always with a where clause), 用 delete.

5、事务的ACID(考点)

  • 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
  • 一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  • 隔离性(Isolation):隔离性是当多个用户并发访问数据库时, 不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):持久性是指一个事务一旦被提交了,就不能再回滚了,已经把数据保存到数据库当中了。

6、事务的并发问题(考点)

  • 脏读
  • 不可重复读
  • 重复度
  • 幻读
事务隔离级别解释幻读脏读不可重复读
读未提交(Read uncommitted)就是一个事务可以读取另一个未提交事务的数据
读已提交(Read committed)一个事务要等另一个事务提交后才能读取数据
可重复读(Repeatable read)就是在开始读取数据(事务开启)时,不再允许修改操作
串行化(Serializable)在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读

斯蒂芬电

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值