MySQL基础:
数据库的创建与删除
CREATE DATABASE ;//创建数据库
DROP DATABASE ;//删除数据库
数据库表的创建与删除
CREATE TABLE (column_name column_type);//创建表
DROP TABLE ;//删除表
增删改查
查询语句
SELECT [DISTINCT|ALL]
FROM
[WHERE ]
[GROUP BY [HAVING]]
[ORDER BY [ASC|DESC]]
//例:查询学生成绩表SC里平均成绩低于80分的学生学号Snum和平均成绩,并按平均成绩降序排列
SELECT Snum AS 学号,AVG(Score) AS 平均成绩
FROM SC
GROUP BY Snum
HAVING AVG(Score)<80 DESC;
插入数据
INSERT INTO [(A1,A2,A3...)]
VALUES (v1,v2,v3...);
//例 :向表学生S中添加一位学生的数据
INSERT INTO S(Snum,Sname,Ssex,Sage,Sphone)
VALUES("0001","张三",18,"男","88888888");
更新数据
UPDATE
SET =
[WHERE ]
//例:将张三的年龄改为20
UPDATE S
SET Sage=20
WHERE Sname="张三";
删除数据
DELETE FROM
[WHERE ]
//例:删除学生张三的信息
DELETE FROM S
WHERE Sname="张三";
MySQL基础面试题
说一下MySQL执行一条查询语句的内部执行过程?
答:
1)客户端先通过连接器连接到MySQL服务器
2)连接器权限验证通过后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有则进入分析器
3)分析器对查询语句进行语法分析和词法分析,判断SQL语法是否正确,如果查询语法错误会直接返回客户端错误信息,如果语法正确则进入优化器
4)优化器对查询语句进行优化处理,例如一个表里有多个索引,优化器会判别哪个索引性能更好
5)优化器执行完进入执行器,执行器对语句进行查询对比,查到满足条件的所有数据然后返回
MySQL查询缓存功能有何优缺点?
答:
MySQL查询缓存功能是在连接器之后发生的,它的优点是效率高,如果已经有缓存则直接返回结果。缺点是失效太频繁导致缓存的命中率较低,任何更新表操作都会清空查询缓存,一次查询缓存非常容易失效
如何关闭MySQL的查询缓存功能?
答:
MySQL查询缓存功能是默认开启的,配置querycachetyoe参数为DEMAND(按需使用)关闭查询缓存,MySQL8.0之后没有查询缓存功能
MySQL可以针对表级别设置数据库引擎吗?怎么设置?
答:
可以针对不同的表设置不同的引擎。在CREATE TABLE语句中使用ENGINE=引擎名(比如Memory)来设置表的存储引擎:
CREATE TABLE student(
id int PRIMARY KEY auto_increment,
username varchar(120),
age int
)ENGINE=Memory
常用的存储引擎InnoDB和MyISAM有什么区别?
答:
最大的区别是InnoDB支持事务,而MyISAM不支持事务。主要区别如下:
1)InnoDB支持崩溃后安全恢复,MyISAM不支持崩溃后安全恢复
2)InnoDB支持行级锁,MyISAM不支持行级锁,只支持到表锁
3)InnoDB支持外键,MyISAM不支持外键
4)MyISAM性能比InnoDB高
5)MyISAM支持FULLTEXT类型的全文索引,InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好
6)InnoDB主键查询性能高于MyISAM
什么是事务?特性?
答:
事务是一系列的数据库操作,是数据库的基本单位
事务的四个特性:
1)原子性。要么全部执行,要么全部不执行
2)一致性。事务的执行使得数据库从一种正确状态转化为另一种正确状态
3)隔离型。事务正确提交之前,不允许把该事务对数据的改变提供给其他事务
4)持久性。事务提交后,结果永远保存于数据库中
一张自增表中有三条数据,删除了两条数据之后重启数据库,再新增一条数据,此时数据的ID是几?
答:
如果这张表的引擎是MyISAM,那么ID=4;如果是InnoDB,那么ID=2
MySQL中什么情况会导致自增主键不能连续?
答:
1)唯一主键冲突会导致自增主键不连续
2)事务回滚也会导致自增主键不连续
什么事独立表空间和共享表空间?它们的区别是?
答:
独立表空间:指的是数据库中所有的数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下
独立表空间:每一个表都会生成以独立的文件方式来存储
共享表空间和独立表空间的最大区别是如果把表放在共享表空间,即使表删除了空间也不会删除,所以表依然很大,而独立表空间如果删除表就会清楚空间
如何设置独立表空间?
答:
独立表空间是由参数innodb fileper_table控制的,把它设置成ON就是独立表空间了。在MySQL5.6.6版本之后,这个值默认为ON
如何进行表空间收缩?
答:
使用重建表的方式可以收缩表空间:
1)alter table t engine=InnoDB
2)optmize table t
3)truncate table t
重建表的执行流程?
答:
1)建立一个临时文件,扫描表t主键的所有数据页
2)用数据页中表t的记录生成B+树,存储到临时文件中
3)生成临时文件的过程中,将所有对t的操作记录在一个日志文件(row log)中
4)临时文件生成后,将日志文件中的操作应用到临时文件,得到一个逻辑数据上与表t相同的数据文件
5)用临时文件替换表t的数据文件
表的结构信息存在哪里?
答:
MySQL8之前,表结构的定义信息存在以.frm为后缀的文件里;MySQL8之后,允许把表结构的定义信息存在系统数据表中
什么是覆盖索引?
答:
覆盖索引是指,索引上的信息足够满足查询请求,不需要再回到主键上去取数据
如果把一个InnoDB表的主键删掉,是不是就没有主键,就没办法进行回表查询了?
答:
可以回表查询,如果把主键删掉了,那么InnoDB会自己生成一个长度为6字节的rowid作为主键
内存表和临时表有什么区别?
答:
内存表,指的是使用Memory引擎的表,。这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在
临时表,可以使用各种引擎类型。如果是使用InnoDB引擎或者MyISAM引擎的临时表,写数据的时候是写到磁盘上的
并发事务会带来哪些问题?
答:
修改丢失、脏读、不可重复读、幻读
VARCHAR和CHAR的区别是什么?
答:
VARCHAR和CHAR最大的区别是,VARCHAR的长度是可变的,CHAR是固定长度。所以CHAR适合存储长度较短的字段和固定长度的字段比如身份证号、手机号等。反之则适合用VARCHAR
MySQL 存储金额应该使用哪种数据类型?
答:
应该使用decimal,因为如果存储其他数据类型比如float,有导致小数点后数据丢失
的风险
删除表的数据有几张方式?区别是?
答:
有两种方式:delete和truncate,区别如下:
1)delete可以添加where条件删除部分数据,truncate不能添加where条件,只能删除整张表
2)delete的删除信息会在MySQL的日志中记录,而truncate的删除信息不回被记录。因此delete的信息可以被找回,而truncate的信息无法被找回
3)truncate因为不记录日志所以执行效率比delete快
delete from t where id=1;
truncate table t;
MySQL支持几种模糊查询?它们的区别是?
答:
支持两种模糊查询:regexp和like
like是对任意多字符匹配或任意单字符进行模糊匹配,而regexp则支持正则表达式的匹配方式
count(column)和count()有什么区别?
答:
最大的区别是统计结果可能不一致,count(column)统计不会统计列值为null的数据,而count(*)则会统计所有信息