最新mysql八股文 chatgpt 都能回答的问题,就没必要螺丝是往那边扭了。
目录
一、数据库知识(通用)篇
1.
说说
drop
、
truncate
、
delete
区别
2.
说说主键、外键、超键、候选键
3.varchar
和
char
的使用场景
?
4.
什么叫视图?游标是什么?
5.
说说
like %
和
-
的区别
6.
为什么用自增列作为主键?
7.
说说非关系型数据库和关系型数据库区别,优势比较
?
8.
说说存储过程的优缺点?
9.
什么是最左前缀原则?
10.
什么是表空间(
Tablespace
)?
11.
什么是索引优化器(
Index Optimizer
)?
12.
什么是范式(
Normalization
)?
13.
什么是反范式(
Denormalization
)?
14.
什么是数据库索引的优点?
15.
什么是
ACID
属性?
16.
视图的优缺点有哪些?
17.
触发器的作用是什么?
18.
什么是存储过程?用什么来调用?
19.
说说存储过程与函数的区别
20.
什么是临时表,临时表什么时候删除
?
21.
什么是数据库范式,根据某个场景设计数据表
?
22.
什么是 内连接、外连接、交叉连接、笛卡尔积等
?
23.SQL
语言分类
24.
说说
count(*)
、
count(1)
、
count(column)
的区别
25.
什么是索引?
26.
索引的作用?它的优点缺点是什么?
27.
说说聚集索引和非聚集索引区别
?
28.
索引的优缺点有哪些?
29.
什么样的字段适合建索引?
30.
说说
MySQL B+Tree
索引和
Hash
索引的区别
?
31.
说说
B
树和
B+
树的区别
32.
为什么说
B+
比
B
树更适合实际应用中操作系统的文件索引和数据库索引?
二、数据库MySql基础篇
1.
如何进行
MySQL
数据库的性能监控和调优?
2.
什么是
MySQL
?它的主要特点是什么?
3.
函数的分类?经常使用的函数有哪些?
4.
分组查询需要注意条件?
5.
如何优化
MySQL
的查询性能?
6.
如何处理
MySQL
中的慢查询?
7.
在
MySQL
中,如何进行用户管理和权限控制?
8.limit
使用方法?
9.
如何增加删除修改表结构
10.
如何开启
MySQL
服务
,
关闭
My
服务
11.
检测端口是否运行
12.mysql
常见数据类型?
13.
如何为
MySQL
设置密码或者修改密码。
14.
如何登陆
MySQL
数据库。
15.
查看当前数据库的字符集
16.
如何查看当前数据库版本
17.
如何 查看当前登录的用户。
18.
查看
T1
数据库中有哪儿些表
19.
创建
GBK
字符集的数据库
oldboy
,并查看已建库完整语句
20.
创建用户
oldboy
,使之可以管理数据库
oldboy
21.
查看创建的用户
oldboy
拥有哪些权限
22.
查看当前数据库里有哪些用户
23.
如何进入
oldboy
数据库
24.
请写一个脚本:
创建一个
innodb GBK
表
test
,字段
id int(4)
和
name varchar(16)
25.
查看建表结构及表结构的
SQL
语句
26.
请使用脚本查询一条数据:插入一条数据
“1,oldboy”
27.
再批量插入
2
行数据
“2,
老男孩
”
,
“3,oldboyedu”
28.
查询名字为
oldboy
的记录
29.
把数据
id
等于
1
的名字
oldboy
更改为
oldgirl
30.
在字段
name
前插入
age
字段,类型
tinyint(2)
31.
不退出数据库
,
完成备份
oldboy
数据库
32.
删除
test
表中的所有数据,并查看
三、数据库MySql篇
1.Mysql
数据库表类型有哪些?
2.
说一下
MySQL
的行锁和表锁?
3.MySQL
怎么恢复半个月前的数据?
4.
一张自增表里面总共有
7
条数据,删除了最后
2
条数据,重启
MySQL
数据库,又插入了一条数据,此
时
id
是几?
5.MySQL
的内连接、左连接、右连接有什么区别?
6.MySQL
问题排查都有哪些手段?
7.
如何做
MySQL
的性能优化?
8.MySQL
数据库作发布系统的存储,一天五万条以上的增量,预计运维三年
,
怎么优化?
9.MySQL
的默认事务隔离级别是
?
10.MySQL
由哪些部分组成
,
分别用来做什么?
11.
怎么验证
MySQL
的索引是否满足需求?
12.
请你介绍一下
mysql
的
MVCC
机制
13.
常用的
Mysql
复制架构有哪些?
14.
请你介绍一下
mysql
的主从复制?
15.Mysql
的存储引擎
,myisam
和
innodb
的区别?
16.
请问
MySQL
的端口号是多少,如何修改这个端口号
17.Mysql
如何为表字段添加索引?
18.
说说自己对于
MySQL
常见的两种存储引擎:
MyISAM
与
InnoDB
的理解?
答案
一、数据库知识(通用)篇
1.说说drop、truncate、 delete区别
最基本:
1) drop
直接删掉表。
2) truncate
删除表中数据,再插入时自增长
id
又从
1
开始。
3) delete
删除表中数据,可以加
where
字句。
(
1
)
DELETE
语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在
日志中保存以便进行进行回滚操作。
TRUNCATE TABLE
则一次性地从表中删除所有的数据并不把单独的
删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发
器。执行速度快。
(
2
) 表和索引所占空间。当表被
TRUNCATE
后,这个表和索引所占用的空间会恢复到初始大小,而
DELETE
操作不会减少表或索引所占用的空间。
drop
语句将表所占用的空间全释放掉。
(
3
) 一般而言,
drop > truncate > delete
(
4
) 应用范围。
TRUNCATE
只能对
TABLE
;
DELETE
可以是
table
和
view
(
5
)
TRUNCATE
和
DELETE
只删除数据,而
DROP
则删除整个表(结构和数据)。
(
6
)
truncate
与不带
where
的
delete
:只删除数据,而不删除表的结构(定义)
drop
语句将删除表的
结构被依赖的约束(
constrain),
触发器(
trigger)
索引(
index);
依赖于该表的存储过程
/
函数将被保留,
但其状态会变为:
invalid
。
(
7
)
delete
语句为
DML
(
data maintain Language),
这个操作会被放到
rollback segment
中
,
事务提交
后才生效。如果有相应的
tigger,
执行的时候将被触发。
(
8
)
truncate
、
drop
是
DLL
(
data define language),
操作立即生效,原数据不放到
rollback segment
中,不能回滚。
(
9
) 在没有备份情况下,谨慎使用
drop
与
truncate
。要删除部分数据行采用
delete
且注意结合
where
来约束影响范围。回滚段要足够大。要删除表用
drop;
若想保留表而将表中数据删除,如果与事务无关,
用
truncate
即可实现。如果和事务有关,或老师想触发
trigger,
还是用
delete
。
(
10
)
Truncate table
表名 速度快
,
而且效率高
,
因为
:?truncate table
在功能上与不带
WHERE
子句的
DELETE
语句相同:二者均删除表中的全部行。但
TRUNCATE TABLE
比
DELETE
速度快,且使用的系统
和事务日志资源少。
DELETE
语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE
通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
(
11
)
TRUNCATE TABLE
删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所
用的计数值重置为该列的种子。如果想保留标识计数值,请改用
DELETE
。如果要删除表定义及其数
据,请使用
DROP TABLE
语句。
(
12
) 对于由
FOREIGN KEY
约束引用的表,不能使用
TRUNCATE TABLE
,而应使用不带
WHERE
子句
的
DELETE
语句。由于
TRUNCATE TABLE
不记录在日志中,所以它不能激活触发器。
2.说说主键、外键、超键、候选键
超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属
性组合在一起也可以作为一个超键。超键包含候选键和主键。
候选键:是最小超键,即没有冗余元素的超键。
主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个
主键,且主键的取值不能缺失,即不能为空值(
Null
)。
外键:在一个表中存在的另一个表的主键称此表的外键。
3.varchar和char的使用场景?
1.char
的长度是不可变的,而
varchar
的长度是可变的。
定义一个
char[10]
和
varchar[10]
。
如果存进去的是
‘csdn’,
那么
char
所占的长度依然为
10
,除了字符
‘csdn’
外,后面跟六个空格,
varchar
就
立马把长度变为
4
了,取数据的时候,
char
类型的要用
trim()
去掉多余的空格,而
varchar
是不需要的。
2.char
的存取速度还是要比
varchar
要快得多,因为其长度固定,方便程序的存储与查找。
char
也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是
以空间换取时间效率。
varchar
是以空间效率为首位。
3.char
的存储方式是:对英文字符(
ASCII
)占用
1
个字节,对一个汉字占用两个字节。
varchar
的存储方式是:对每个英文字符占用
2
个字节,汉字也占用
2
个字节。
4.
两者的存储数据都非
unicode
的字符数据。
4.什么叫视图?游标是什么?
视图:
是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表
或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查 询。
游标:
是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前 行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游 标显得十分重要。
5.说说like %和-的区别
通配符的分类
%
百分号通配符
:
表示任何字符出现任意次数
(
可以是
0
次
).
下划线通配符
:
表示只能匹配单个字符
,
不能多也不能少
,
就是一个字符
.
like
操作符
: LIKE
作用是指示
mysql
后面的搜索模式是利用通配符而不是直接相等匹配进行比较
.
注意
:
如果在使用
like
操作符时
,
后面的没有使用通用匹配符效果是和
=
一致的
,SELECT * FROM products
WHERE products.prod_name like '1000';
只能匹配的结果为
1000,
而不能匹配像
JetPack 1000
这样的结果
.
%
通配符使用
:
匹配以
"yves"
开头的记录
:(
包括记录
"yves") SELECT FROM products WHERE
products.prod_name like 'yves%';
匹配包含
"yves"
的记录
(
包括记录
"yves") SELECT FROM products WHERE products.prod_name like
'%yves%';
匹配以
"yves"
结尾的记录
(
包括记录
"yves",
不包括记录
"yves ",
也就是
yves
后面有空格的记录
,
这里需要注意
)
SELECT * FROM products WHERE products.prod_name like '%yves';
通配符使用
: SELECT FROM products WHERE products.prod_name like '