当前位置: 首页 > news >正文

MySQL面试(1)

MySQL面试考点通关:从基础概念到实操

刚准备面试的小伙伴是不是对MySQL知识点又多又杂感到头疼?一会儿是关系型和非关系型数据库的区别,一会儿是DDL和DML操作的语法,记了又忘、混在一起?别慌!这篇文章就用最通俗的语言,把MySQL高频面试考点拆解开,从概念到实操一步步讲明白,让你看完就能懂、记住就能用。

一、先搞懂:数据库到底分哪几类?

面试常问“数据库分类”,其实就4种,记住关键词就行:

  • 网状数据库:老古董级别的,数据像渔网一样关联,现在基本不用了
  • 层次数据库:数据按“上下级”排列,比如“部门→员工”的树形结构,用得也少
  • 关系型数据库:咱们重点学的!用“表格”存数据,还能保证数据安全,比如MySQL、Oracle
  • 非关系型数据库:不按表格来,存数据更灵活,比如存键值对的Redis、存文档的MongoDB

二、关系型VS非关系型:核心区别一句话讲透

很多人分不清这俩,其实抓准“约束”和“结构”两个点就够了:

对比维度关系型数据库(如MySQL)非关系型数据库(如Redis、MongoDB)
数据结构二维表格(行是数据,列是字段)键值对、文档等(没有固定表格结构)
数据约束有严格约束(比如主键不能重复、字段非空)几乎没约束,想存啥存啥
表关联支持1对1、1对多关联(用外键)没有表关联,要关联得自己写逻辑
典型代表MySQL、Oracle、SQL ServerRedis(键值)、MongoDB(文档)

三、MySQL是什么?为啥大家都用它?

面试常问“介绍下MySQL”,不用讲太复杂,记住3个核心特点:

  1. 开源免费:不用花钱买版权,小公司、个人开发者都能用
  2. 轻量级:安装包小,占内存少,电脑配置不高也能跑
  3. 速度快:处理数据的效率高,日常开发够用了

现在MySQL归甲骨文公司管,但核心功能还是免费的,所以一直是中小型项目的首选数据库。

四、SQL语言:操作数据库的“普通话”

你可以把SQL理解成“和数据库对话的语言”,不管是MySQL还是Oracle,都能用SQL操作。它分5大类,记清每类做啥就行:

SQL分类英文全称作用常用命令
DQL数据查询语言查数据(最常用)SELECT
DML数据操作语言增、删、改数据INSERT、DELETE、UPDATE
DDL数据定义语言创建、修改、删除表/库CREATE、ALTER、DROP
DCL数据控制语言给用户授权、收回权限GRANT、REVOKE
TCL事务控制语言管理事务(保证数据安全)COMMIT、ROLLBACK

考点加餐:SQL和NoSQL的区别

这是高频面试题,记住5个关键点:

  1. 结构:SQL是“结构化”(必须按表格存),NoSQL是“非结构化”(灵活存)
  2. 约束:SQL有主键、非空等约束,NoSQL没有
  3. 关联:SQL支持表关联(外键),NoSQL不支持
  4. 一致性:SQL满足ACID(数据绝对安全),NoSQL大多只满足基本一致性
  5. 存储:SQL主要存在磁盘,NoSQL(如Redis)主要存在内存(速度更快)

五、DDL操作:创建/修改/删除表,一步到位

DDL是“定义表结构”的操作,比如建表、加字段、删表,这些语法必须记熟,面试可能让你写!

1. 最核心:创建表(CREATE TABLE)

建表时要指定“字段名+类型+约束”,比如创建一个“学生表”:

create table t_student(`stuid` int(4) auto_increment PRIMARY KEY,  -- 学号:自增+主键(唯一且非空)`sname` VARCHAR(15) not null,               -- 姓名:非空(必须填)`ssex` VARCHAR(1) not null DEFAULT '男',    -- 性别:非空,默认是“男”`age` int(3) CHECK(age<=100 and age>=0),    -- 年龄:0-100之间(检查约束)`email` VARCHAR(30) UNIQUE                  -- 邮箱:唯一(不能重复)
);

2. 常用辅助操作

  • 查看表结构:想知道表有哪些字段,用 desc 表名;
    desc t_student;  -- 查看t_student表的字段、类型、约束
    
  • 查看建表语句:想知道表是怎么创建的,用 show create table 表名;
    show create table t_student;
    
  • 添加字段:给表加个“班级ID”字段,还能指定位置(比如在“姓名”后面)
    -- 1. 直接加在最后
    alter table t_student add cid int(4);
    -- 2. 加在sname后面
    alter table t_student add cid int(4) AFTER sname;
    
  • 修改/删除字段
    -- 修改字段类型(比如把cid改成int(6))
    alter table t_student modify cid int(6);
    -- 改字段名(把cid改成class_id)
    alter table t_student change cid class_id int(4);
    -- 删除字段(删除class_id)
    alter table t_student drop class_id;
    
  • 删除表:注意!删表会把数据也删了,谨慎用
    drop table t_student;  -- 删除t_student表
    

3. 必考点:数据表的完整性约束

约束就是“给数据定规矩”,保证数据不乱,常用的有7种:

约束类型作用示例
主键(PRIMARY KEY)唯一标识一行数据,非空且唯一stuid int(4) PRIMARY KEY
非空(NOT NULL)字段必须填值,不能空sname VARCHAR(15) NOT NULL
自增(AUTO_INCREMENT)字段值自动增长,不用手动填stuid int(4) AUTO_INCREMENT
默认值(DEFAULT)没填值时,用默认值ssex VARCHAR(1) DEFAULT ‘男’
检查(CHECK)字段值必须满足条件age int(3) CHECK(age<=100)
唯一(UNIQUE)字段值不能重复,但可以空email VARCHAR(30) UNIQUE
外键(FOREIGN KEY)关联两个表(比如学生表关联班级表)看下面示例

外键示例(让学生表的class_id关联班级表的cid):

alter table t_student 
add CONSTRAINT fk_student_class  -- 外键名(随便起)
FOREIGN key (class_id)           -- 学生表的关联字段
REFERENCES t_class (cid);        -- 关联班级表的cid字段

4. 高频题:char和varchar的区别

都是存字符串,但用法不一样:

  • char:定长字符串。比如 char(10),不管你存“abc”还是“abcdefg”,都占10个字符的空间,适合存长度固定的内容(比如手机号、身份证号)
  • varchar:变长字符串。比如 varchar(10),存“abc”就占3个字符空间,存“abcdefg”就占7个,适合存长度不固定的内容(比如姓名、地址)

5. 高频题:Decimal、Float、Double的区别

都是存小数,但精度不一样:

  • Float/Double:存“近似值”,会有精度损失。比如存0.1,实际存的可能是0.1000000001,适合对精度要求不高的场景(比如温度、身高)
  • Decimal:存“精确值”,没有精度损失。适合存钱(比如金额、工资),比如 Decimal(10,2)表示总共10位数字,其中2位是小数(最大存99999999.99)

六、DML操作:增删改数据,日常开发天天用

DML是“操作表中数据”的语法,增、删、改是核心,必须熟练!

1. 新增数据(INSERT)

两种写法,记住“字段和值要对应”:

-- 1. 指定字段(推荐!就算表加了新字段也不影响)
insert into t_student (stuid, sname, ssex, age, email)
values (1, '张三', '男', 20, 'zhangsan@xxx.com');-- 2. 不指定字段(必须给所有字段赋值,顺序和建表时一致)
insert into t_student 
values (2, '李四', '女', 19, 'lisi@xxx.com');-- 3. 一次插多条数据(用逗号分隔)
insert into t_student (sname, ssex, age, email)
values ('王五', '男', 21, 'wangwu@xxx.com'),('赵六', '女', 20, 'zhaoliu@xxx.com');

注意:不同类型字段的赋值规则:

  • 整数/浮点:直接写值(比如1、20.5)
  • 字符串/日期:用单引号包起来(比如’张三’、‘2024-05-01’)
  • 日期还能自动取当前时间:用 now()(比如 now()表示当前时间)

2. 修改数据(UPDATE)

必须加WHERE条件! 不然会把表中所有数据都改了,面试时忘了WHERE会扣分!

-- 把stuid=1的学生年龄改成21
update t_student 
set age=21, email='zhangsan_new@xxx.com'  -- 可以同时改多个字段
where stuid=1;  -- 只改stuid=1的这一行

3. 删除数据(DELETE)

同样要加WHERE条件,不然会删光所有数据!

-- 删除stuid=2的学生
delete from t_student 
where stuid=2;

4. 面试必考题:DELETE、TRUNCATE、DROP的区别

这三个都能删数据,但差别很大,记清3个维度:

对比维度DELETETRUNCATEDROP
操作类型DML(数据操作)DDL(数据定义)DDL(数据定义)
能否回滚能(删错了可以恢复)不能(删了就没了)不能(删表+数据)
索引重置不重置(删了数据,自增字段继续从上次开始)重置(自增字段从1开始)删表了,索引也没了
效率慢(一条一条删)快(直接清空表)快(直接删表)
作用范围删表中数据(表还在)删表中数据(表还在)删表+数据(表没了)

简单记:想删数据留表、能恢复→用DELETE;想快速清空表、不恢复→用TRUNCATE;想把表整个删掉→用DROP。

七、总结:面试怎么考?怎么记?

MySQL面试不会考太偏的内容,重点就是:

  1. 概念题:数据库分类、关系型vs非关系型、SQL分类、DELETE/TRUNCATE/DROP区别
  2. 语法题:建表(带约束)、INSERT/UPDATE/DELETE语句、添加字段、外键关联
  3. 细节题:char vs varchar、Decimal vs Float、字段赋值规则

记的时候别死记硬背,结合“场景”来:比如想到“存手机号”就记char,想到“存金额”就记Decimal,想到“删数据怕删错”就记DELETE。

把这些知识点过一遍,再动手写几遍SQL,MySQL基础面试就没问题啦!后续还会讲DQL查询(比如SELECT加条件、联表查询),一步步进阶~


文章转载自:

http://k1lRihM5.Lwbhw.cn
http://TrWwsv3N.Lwbhw.cn
http://am81oBAc.Lwbhw.cn
http://3CittDG0.Lwbhw.cn
http://jmDmTFJy.Lwbhw.cn
http://eSHNgUeb.Lwbhw.cn
http://JipJODjE.Lwbhw.cn
http://vyhHyLEn.Lwbhw.cn
http://keBiGgWo.Lwbhw.cn
http://zS8V7MrS.Lwbhw.cn
http://fw5eaqLv.Lwbhw.cn
http://NJcdSLj1.Lwbhw.cn
http://BKzLRM2J.Lwbhw.cn
http://g6ES3xgT.Lwbhw.cn
http://FWWOtinA.Lwbhw.cn
http://OFLae6jN.Lwbhw.cn
http://RcwLhqZ7.Lwbhw.cn
http://uADWR8gJ.Lwbhw.cn
http://lWVP4Ivi.Lwbhw.cn
http://5ac3hUCT.Lwbhw.cn
http://7W9viVlm.Lwbhw.cn
http://C0RK7MIQ.Lwbhw.cn
http://1Pci9VLj.Lwbhw.cn
http://YlVP4M5v.Lwbhw.cn
http://CNMkmqyq.Lwbhw.cn
http://ib2IBMio.Lwbhw.cn
http://7w9av3Or.Lwbhw.cn
http://GF7mcu10.Lwbhw.cn
http://N1IvFMjp.Lwbhw.cn
http://dLKyr3BN.Lwbhw.cn
http://www.dtcms.com/a/384289.html

相关文章:

  • ArcGIS定向影像(1)——非传统影像轻量级解决方案
  • 【Linux指南】Makefile进阶:通用化语法与实战技巧
  • 移相全桥模拟控制电路
  • ES6 面试题及详细答案 80题 (62-80)-- 模块化与其他特性
  • D005 vue+django音乐推荐大数据|推荐算法|多权限| 可视化|完整源码
  • 工厂自动化正从 “人工堆叠” 向 “设备替代” 快速转变
  • 栈-227.基本计算器II-力扣(LeetCode)
  • python 自动化从入门到实战-做一个超实用的二维码生成工具(5)
  • 今天开始学习新内容“服务集群与自动化”--crond服务、--syslog服务以及DHCP协议
  • LeetCode 379 - 电话目录管理系统(Design Phone Directory)
  • 《Python 自动化实战:从零构建一个文件同步工具》
  • 风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具
  • Vue: 模板引用 (Template Refs)
  • Web2 vs Web3
  • 上海交大3D体素赋能具身导航!BeliefMapNav:基于3D体素信念图的零样本目标导航
  • SAP-ABAP:SAP ABAP中的JSON序列化利器:/UI2/CL_JSON=>SERIALIZE完全指南实例详解
  • stm32 can错误处理问题
  • python 自动化从入门到实战-开发一个随机点名系统(6)
  • 如何用 GitHub Actions 为 FastAPI 项目打造自动化测试流水线?
  • godot+visual studio配置c#环境
  • 文件查找失败:‘module‘ at node_modules\sass\sass.node.js:7
  • (一)Vue.js 框架简介
  • Vue 中在 Vue 项目中引入 Cesium 并加载本地离线地图
  • Node.js ≥ 18 安装教程
  • 第四阶段C#通讯开发-4:网络通讯_网络协议
  • 如何实现测试环境隔离临时数据库(pytest+SQLite)
  • 像连接mysql一样连接mongodb
  • 从零开始搞定C++类和对象(下)
  • 企业级实战:构建基于Qt、C++与YOLOv8的模块化工业视觉检测系统
  • TexturePacker 打包 TextAtlas:按顺序排列