MYSql面试

1.mysql的复制原理及流程
导入需要重新生成数据库,然后解析sql语句,检查约束、建立索引、生成数据文件,此时就是向硬盘中写的过程;
复制是直接向硬盘写的过程;
(3种方式)
       1) 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;
       2) 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;

       3) 从:sql执行线程——执行relay log中的语句



2.mysql中的 myisam 与 innodb 区别 (5点)-------存储引擎
    myism 简单效率高,用于读多写少;就是快就是方便 就是好,有高发写操作时,可以通过框架弥补;
    innodb用于写多的时候;支持事务处理、外键、行级锁
    innodb支持事物,行级锁

3.varchar 与 char区别,varchar(50)  50的含义,int(12)12含义
    a. varchar变长,char定长
    b. 存储容量不同 char255 varchar 65532(开头1长度2) latin1个 字符占1位 gbk2位 utf83位
4.0之前  50是值字节 只能存 16个(utf8 三个)
5.0之后 50就是字符 存50个
    c.int类型的存储大小是固定的,4个字节32位,2的32次方, 不会变的  (12)只是设置显示多长的宽度,实际小于该宽度就0补齐,
4.innodb事务与日志的实现方式

5.binlog日志录入格式以及区别

6.drop delete truncate区别
drop删表  delete truncate 删数据,delete删一行会记录在事务日志中,truncate则一次性全部删除,并且不记录日志,由外键的不能用truncate删除表(其实是删除数据了,表结构不会变),因为他不记录在日志中,不能激活触发器

7.数据库优化
(1)sql语句优化
(2)索引优化
(3)数据库结构优化
避免全表扫描,select*   where null /or/函数/<、>
8.范式
第一范式:每一列都是不可分割的数据项,无重复列
第二范式:实体属性完全依赖主关键字
第三范式:不能包含其他表中已包含的非主关键字信息

9.事务特性acid

     原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样

       一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

       隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。

       持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。


10.连接种类
内连接: .... inner join   ...  on
外连接:左外连接  ....  left join  ...   on
                右外连接  ....  right join  ...   on
                全连接(mysql不支持)

11.union 合并取并集 如果要保留重复 用union all

12.索引的分类
hash只能精确查找
btree左前缀原则(断桥原则)一旦查询条件不是全部就不能了













### MySQL 面试常见问题及答案 #### 1. 什么是 SQL 注入式攻击?如何防范? SQL 注入式攻击是指攻击者通过在 Web 表单的输入域或页面请求的查询字符串中插入 SQL 命令,欺骗服务器执行恶意的 SQL 操作[^2]。 为了防范 SQL 注入式攻击,可以采取以下措施: - 替换单独出现的单引号为两个单引号,避免修改 SQL 命令的含义。 - 删除用户输入内容中的所有连字符。 - 限制数据库账户的权限,使用不同的用户账户执行查询、插入、更新和删除操作。 - 使用存储过程来执行所有的查询。 - 限制表单或查询字符串输入的长度。 - 检查用户输入的合法性。 - 检查提取数据的查询所返回的记录数量。 #### 2. MyISAM 和 InnoDB 的区别是什么? MyISAM 和 InnoDB 是 MySQL 中常用的两种存储引擎,它们的主要区别如下[^3]: - **锁机制**:MyISAM 对整张表加锁,而 InnoDB 支持行级锁。 - **事务支持**:MyISAM 不支持事务,而 InnoDB 支持事务。 - **外键支持**:MyISAM 不支持外键,而 InnoDB 支持外键。 - **存储空间**:MyISAM 存储空间较小,适合压缩,而 InnoDB 占用更多的存储空间。 - **性能**:MyISAM 在筛选大量数据时更快,而 InnoDB 更适合需要高并发写入的场景。 #### 3. 如何优化 MySQL 查询性能? 优化 MySQL 查询性能可以从以下几个方面入手: - 使用索引:为经常用于查询条件的字段创建索引,减少全表扫描的时间[^1]。 - 避免 SELECT *:仅选择需要的列,减少不必要的数据传输。 - 使用 EXPLAIN 分析查询:通过 `EXPLAIN` 关键字查看查询执行计划,发现潜在的性能瓶颈。 - 优化数据库结构:合理设计表结构,避免冗余字段,减少表之间的关联复杂度。 - 缓存查询结果:对于不频繁变化的数据,可以通过缓存减少数据库查询次数。 #### 4. 什么是事务?MySQL 中如何实现事务? 事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态。事务具有 ACID 特性: - **原子性 (Atomicity)**:事务是一个不可分割的工作单位,要么全部完成,要么全部失败。 - **一致性 (Consistency)**:事务必须使数据库从一个一致性状态变换到另一个一致性状态。 - **隔离性 (Isolation)**:一个事务的执行不能被其他事务干扰。 - **持久性 (Durability)**:事务一旦提交,其结果就是永久性的。 在 MySQL 中,可以通过以下方式实现事务: ```sql START TRANSACTION; -- 执行一系列 SQL 操作 COMMIT; -- 提交事务 ROLLBACK; -- 回滚事务 ``` #### 5. 如何处理大数据量的分页查询? 在处理大数据量的分页查询时,传统的 `LIMIT` 方法可能会导致性能下降。可以采用以下方法优化: - 使用主键范围查询代替 `LIMIT`,例如: ```sql SELECT * FROM table WHERE id > last_id ORDER BY id LIMIT 10; ``` - 减少查询的字段数量,仅选择必要的字段。 - 添加合适的索引以加速查询。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值