【面试突击】mysql相关知识

本文探讨了数据库引擎的选择策略,详细解析了InnoDB和MyISAM的区别,深入解读了ACID事务特性,并介绍了数据库范式、数据结构和操作语句。此外,还讲解了索引优化、常见问题及高并发解决方案,适合数据库开发者和面试者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库引擎

InnoDB存储引擎:事务型数据库首选引擎,支持事务安全表(ACID),支持行锁定和外键,是MySQL默认引擎。
MyISAM存储引擎:基于ISAM存储引擎,并对其进行扩展。是在Web、数据仓库和其他应用环境下最常使用的存储引擎之一。具有较高的插入和查询速度,不支持事务。
数据库引擎的选择:

如果没有特别的需求,使用默认的Innodb即可。
MyISAM:非聚簇索引。以读写插入为主的应用程序,比如博客系统、新闻门户网站。
Innodb:聚簇索引。更新(删除)操作频率也高,或者要保证数据的完整性;并发量高处理大量数据,支持事务、行级锁和外键。比如OA自动化办公系统。

数据库事务

ACID:原子、一致、隔离、持久

事务特性解释
原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性(Isolation)事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对于并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中的数据的改变是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

数据库范式

第一范式:
第二范式:
第三范式:

一范式就是属性不可分割,二范式就是要有主键,其他字段都依赖于主键,三范式就是要消除传递依赖,消除冗余,就是各种信息只在一个地方存储,不出现在多张表中

数据库数据结构

char和varchar

char(M):M是0~255之间的整数
varchar(M):M是0~65535之间的整数
null

数据库操作语句

  • auto_increamnt,需要和key一起使用
  • Insert into tablename () values(),(),…();可以插入多行数据
  • drop、delete与truncate的区别
    三者都表示删除,但是三者有一些差别:
操作DeleteTruncateDrop
类型属于DML属于DDL属于DDL
回滚可回滚不可回滚不可回滚
删除内容表结构还在,删除表的全部或者一部分数据行表结构还在,删除表中的所有数据从数据库中删除表,所有的数据行,索引和权限也会被删除
删除速度删除速度慢,需要逐行删除删除速度快删除速度最快

因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。

  • union和union all:
    union用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。
    union会默认删除结果当中的重复项;
    union all会显示所有结果而不会删除重复项,效率相对高一些;
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL(包含重复项) | DISTINCT(去除重复项,默认去除)]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

举例:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘宝 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;

查询结果:
在这里插入图片描述

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

查询结果(包含重复项):在这里插入图片描述
join
group by

数据库索引

学习索引之前建议查看b树和b+树
索引定义
索引是数据库管理中的一种排序的数据结构,相当于目录。
大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。B+Tree是数据库系统实现索引的首选数据结构
索引优缺点
优点:可以加快检索速度;可以优化提升性能;
缺点:创建和维护需要时间,对表操作也需要动态维护索引,会降低增删改的效率;占据物理空间。
索引实现原理
MyISAM 索引实现

MyISAM 引擎使用 B+Tree 作为索引结构,叶节点的 data 域存放的是数据记录的地址。下图是 MyISAM 索引的原理图:
在这里插入图片描述
这里设表一共有三列,假设我们以 Col1 为主键,则图 是一个 MyISAM 表的主索引(Primary key)示意。可以看出 MyISAM 的索引文件仅仅保存数据记录的地址。

  • where:
  • order by:

数据库

数据库优化

数据库常见的面试笔试问题

  1. 查询两个数据表,select *from table1,table2;输出的结果是row(table1)*row(table2);
  2. 如何处理高并发问题(12306抢票、秒杀情景)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值