mysql学习

66 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

InnoDB和MyISAM区别

  • MyISAM: 只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据.
  • InnoDB: 支持事务和行级锁,是innodb的最大特色.行锁大幅度提高了多用户并发操作的新能.但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的
  • InnoDB引擎DELETE 表时,是一行一行的删除,MyISAM引擎则是先drop表,然后重建表
  • MyISAM相对简单所以在效率上要优于InnoDB
  • 读多写少用MyISAM,读少写多高并发用InnoDB

char和varchar区别

  • char是一种固定长度的类型
  • varchar则是一种可变长度的类型

FLOAT DOUBLE DECIMAL区别

  • DECIMAL使用的时候要指定精度,否则按照默认值decimal(10,0) 来操作
  • 在长度一定的情况下,浮点数能够表示更大的数据范围,但是缺点是会引起精度问题
  • 一般货币、科学数据使用DECIMAL

MySQL的复制原理以及流程

  • 主: binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
  • 从: io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;
  • 从: sql执行线程——执行relay log中的语句;

innodb引擎的4大特性

  • 插入缓冲(insert buffer)
  • 二次写(double write)
  • 自适应哈希索引(ahi)
  • 预读(read ahead)

varchar(50)中50的涵义

  • 最多存放50个字符

int(20)中20的涵义

  • 指显示字符的长度

MySQL日志类型

  • 错误日志: 记录出错信息,也记录一些警告信息或者正确的信息.
  • 查询日志: 记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行.
  • 慢查询日志: 设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中.
  • 二进制日志: 记录对数据库执行更改的所有操作.
  • 中继日志:
  • 事务日志:

drop,delete与truncate的区别

  • drop直接删掉表
  • truncate删除表中数据,再插入时自增长id又从1开始
  • delete删除表中数据,可以加where字句.

什么情况下设置了索引但无法使用

  • 以“%”开头的LIKE语句,模糊匹配
  • OR语句前后没有同时使用索引
  • 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

如何通俗地理解三个范式

  • 第一范式: 1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
  • 第二范式: 2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
  • 第三范式: 3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余

主键、外键和索引的区别

  • 主键
    • 唯一标识一条记录,不能有重复的,不允许为空
    • 用来保证数据完整性
    • 主键只能有一个
  • 外键
    • 表的外键是另一表的主键, 外键可以有重复的, 可以是空值
    • 用来和其他表建立联系用的
    • 一个表可以有多个外键
  • 索引
    • 该字段没有重复值,但可以有一个空值
    • 是提高查询排序的速度
    • 一个表可以有多个唯一索引

数据库的优化

  • 从结构层
    • web服务器采用负载均衡服务器,mysql服务器采用主从复制,读写分离
  • 从储存层
    • 采用合适的存储引擎,采用三范式
  • 从设计层
    • 采用分区分表,索引,表的字段采用合适的字段属性,适当的采用逆范式,开启mysql缓存
  • sql语句层
    • 结果一样的情况下,采用效率高,速度快节省资源的sql语句执行

SQL语言包括哪几部分

  • 数据定义(DDL)
    • create table, alter table, drop table, craete/drop index等
  • 数据操纵(DML)
    • select ,insert,update,delete,
  • 数据控制(DCL)
    • grant,revoke
  • 数据查询(DQL)
    • select

事务定义及其特性

  • 是一系列的数据库操作
  • 如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功.如果所有操作 完成,事务则提交,其修改将作用于所有其他数据库进程.如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消.
  • 原子性 一致性 隔离性 持久性

MySQL四种隔离级别

  • Serializable (串行化): 可避免脏读、不可重复读、幻读的发生.(锁表)
  • Repeatable read (可重复读): 可避免脏读、不可重复读的发生.
  • Read committed (读已提交): 可避免脏读的发生.(一个事务只能看见已经提交事务所做的改变)
  • Read uncommitted (读未提交): 最低级别,任何情况都无法保证.(脏读)