√
√ 1.简单说一说drop、delete与truncate的区别
drop 用于删除结构:数据库、表
delete 删除数据,可以回滚
truncate 删除结构重建构建,不可以回滚
基于mysql
delete不重置自动增长列的计数值
truncate重置自动增长列的计数值
√ 2.什么是主键?什么是外键?并说出它们的作用
主键:唯一标识一条记录的字段或字段的组合称为主键。
主键不能重复,也不允许为空
外键:用来维护两个表之间数据的一致性,。
外键可以有重复的, 也允许有空值
作用:
主键:用来保证数据完整性,保证记录的唯一性
外键:通过设置外键和其他表建立关联关系(一对一,一对多,多对多)
√ 3.说出char和varchar的区别,及它们的适用场景
char是一种固定长度的字符串类型,
varchar是一种可变长度的字符串类型;
适用场景:
char一般用来存储长度固定字段,如:手机号,身份证号等
varchar一般用来存储不固定长度的字段:如:用户名,昵称等
√ 4.说出不小于3种mysql数据库支持的约束,并说明它们的使用场景
1. 主键约束:在主键上使用
2. 外键约束:建立俩个表之间的关系时使用
3. 唯一约束:保证数据表中某个字段数据的唯一性时使用
4. 非空约束:需要保证数据库字段值不为空时使用
5. 自动增长列:数据值自增时使用,字段类型必须是整数,且必须使用主键修饰。
√ 5.说出5种SQL中常用的聚合函数,并说明它们的作用
1. avg():返回指定组中的平均值,空值被忽略;
2. count():返回指定组中的项目个数
3. max():返回指定数据中的最大值;
4. min():返回指定数据中的最小值;
5. sum():返回指定数据的和,只能用于数字列,空值忽略;
√ 6.说出SQL中内连接、左连接、右连接的区别
内连接:是从结果表中删除与其他被连接表中没有匹配行的所有行
是从结果表中保留与其他被连接表中能够匹配的所有行
左连接(左外连接):以左表作为基准进行查询,左表数据都显示,连接条件成立右表数据显示,条件不成立显示null
右连接(右外连接):以右表作为基准进行查询,右表数据都显示,连接条件成立左表数据显示,条件不成立显示null
√ 7.谈谈数据库连接池的作用
作用:
1.资源重用,避免了数据库连接频繁建立、关闭的开销
2.更快的系统响应速度,直接从连接池中获取连接,响应速度加快
3.控制资源的使用,连接池能自动维护池中的连接数量,提高资源的利用率。
常用的数据库连接池:DBCP、C3P0、Druid
√ 8.数据库有100条数据,怎么查询第50,51条
select * from table_name limit 49, 2
原因:MySQL的limit用法:
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录;n是指从第m+1条开始,取n条。
√ 9.什么是数据库事务
事务:业务中的一组操作,要么全部成功,要么全部失败,不可分割的工作单位。
√ 10.数据库事务的四大特性
数据库事务的四大特性为:ACID,分别是原子性、一致性、隔离性和持久性
原子性:不可分割的工作单位,操作要么全部成功,要么全部失败;
一致性:一个事务执行前后,表中数据必须保持一致。比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱;
隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰;
持久性:事务一旦提交后,数据库中的数据必须被永久的保存下来。
√ 11.事务并发访问会产生的问题
脏读:一个事务读取到了另一个事务中尚未提交的数据
不可重复读:一个事务读取到了另一个事务中已经提交的数据,通常为update时引发的问题
幻读:一个事务读取到了另一个事务中已经提交的数据,通常为insert或delete时引发的问题
√ 12.事务的四种隔离级别
读未提交:任何问题都没有解决;
读已提交:解决了脏读问题;
可重复读:解决了脏读和不可重复读问题;
串行化:解决了脏读、不可重复读和幻读问题。
√ 13.MySQL是怎么管理事务的
操作开始前开启事务,操作成功完成提交事务,操作失败回滚事务。
开启事务:start transaction
提交事务:commit
回滚事务:rollback
√ 14.谈谈对事务的保存点理解
在事务的处理过程中,业务操作执行了一部分,可以记录一个保存点,程序继续执行,如果程序出现异常,可以回滚所有,也可以回滚到保存点,从而保证已经执行的部分操作可以进行事务的提交。
事务的保存点,类似单击游戏的存档和读档:
1、如果没有游戏的存档功能,每次玩单机游戏都会从第一关重新开始。
2、如果使用了游戏的存档功能,下次在玩游戏时,就会从存档处开始。
√ 15.数据库去重
distinct 对查询结果去重。
借助group by 进行分组,也可以出现去重效果。
√ 16.group by 的注意事项
1.SELECT子句中的列名必须为分组列或聚合函数
2.聚合函数对于GROUP BY子句定义的每个组各返回一个结果
3.必须在GROUP BY 子句之前指定 WHERE 子句
4.having对分组结果进行过滤。
√ 17.数据库主键,不设置主键会怎么样
1.主键用于表示数据(记录)的唯一性, 不设置主键会导致数据表中可能存在完全相同的数据;
2.一个表的外键必须是另一个表的主键,不设置主键将无法建立俩个表之间的关联关系;
3.设置主键时,会自动增加索引,有利于提高数据的检索速度;
√ 18.列举几种表连接方式, 有什么区别?
1.交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积
2.左右外连接:左连接以左表为基表,右表为从表,基表全部展示,从表数据对应匹配条件进行展示,没有匹配显示null
3.内连接:还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行。
√ 19.having是什么
having关键字通常是与group by关键字联合使用
group by 进行分组,having对分组结果进行过滤。
√ 20.在数据库中查询语句速度很慢,如何优化?
1)应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3)很多时候用 exists 代替 in 是一个好的选择
4)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤
以上在我看来是基础,必须掌握的.
以下有时间再背吧.
21.什么是视图?
视图是一个虚拟表,其内容由查询定义。
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。创建视图时候,可以是一个数据表的一部分,也可以是多个基表的联合,
从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例:查询,插入,修改,删除操作等。
22.表和视图的关系
用来创建视图的表叫做基表 base table
视图(view)是在基表之上建立的,它的结构(即所定义的列)和内容(即所有数据行)都来自基表,它依据基表存在而存在。一个视图可以对应一个基表,也可以对应多个基表。
23.主键(primary key)和唯一索引(unique index)区别
1, 主键一定是唯一性索引,唯一性索引并不一定就是主键。
2, 一个表中可以有多个唯一性索引,但只能有一个主键。
3, 主键列不允许空值,而唯一性索引列允许空值。
注意:唯一索引也称为唯一约束
24.什么是索引?
索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树。
索引相当于字典的目录,作用在于提升查询效率。
25.索引的分类
据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
唯一索引:不允许其中任何两行具有相同索引值的索引。
主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引通常提供更快的数据访问速度。
26.索引的优缺点
索引的优点:
参考:https://blog.csdn.net/u013310119/article/details/52527632
27.什么情况应该使用索引?什么情况下又不应该使用?
适用场景:
不适用场景:
区别:
1、视图是已经编译好的sql语句;而表不是。
2、视图没有实际的物理记录;而表有。
3、视图是窗口;表是内容
4、表占用物理空间而视图不占用物理空间
5、视图的建立和删除只影响视图本身,不影响对应的基本表。
28.mysql查询条件里如何拼接字符串
1.合并字段concat
select concat(user_name, password ) from tb_user;
下述只有mysql才有:
2.使用指定连接符合并字段 concat_ws
#是连接符:select concat_ws("#" , user_name , password ,id ) from tb_user;
3.合并结果group_concat,将所有结果显示在一个单元格中
:select group_concat(user_name , password ) from tb_user;
29.union和union all有什么不同?
都是集合运算,求的是并集:用于合并两个或多个 SELECT 语句的结果集
union:不允许出现重复的记录
union all:允许出现重复的记录
30.在数据库中你怎么把时间进行格式化
在数据库中可以使用 DATE_FORMAT(date,format)进行时间格式化
date 参数是合法的日期
format 参数规定日期/时间的输出格式
31.count()和count(1)的效率哪个更高?
count()和count(1)执行的效率是完全一样的
count(1)的执行计划将转化为count(*)
参考:
https://www.cnblogs.com/sueris/p/6650301.html
https://blog.csdn.net/moni_mm/article/details/82056021
32.count(*)和count(1)的结果一样吗?
一样
33.超键、候选键、主键、外键分别是什么?
主键:唯一标识一条记录的字段或字段的组合称为主键。
主键不能重复,也不允许为空
外键:用来维护两个表之间数据的一致性,。
外键可以有重复的, 也允许有空值
其他没有学过
34.数据库图形化工具的好处
可以直观的操作数据 查看数据,可以借助图形化界面轻松完成对数据库的常用操作
35.你做过那些Mysql数据库优化
Mysql的优化,大体可以分为三部分:
1.索引的优化,2.sql语句的优化,3.表的优化
1.索引的优化
(1)只要列中含有NULL值的字段,不使用索引
(2)尽量使用短索引
(3 经常在where子句使用的列,尽量使用索引,有多个列where或者order by子句的,应该建立复合索引,对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引
(4)尽量不要在列上进行运算
(5)尽量不要使用not in和<>操作
2.sql语句的优化
(1)查询时,能不要就不用,尽量写全字段名
(2)查询时,尽量使用连接查询代替子查询
(3)多表连接时,尽量小表驱动大表,即小表 join 大表
3.表的优化
(1)表的字段尽可能用NOT NULL
(2)字段长度固定的表查询会更快
(3)把数据库的大表按时间或一些标志分成小表
(4)将表分区
36.【了解】MySQL的数据引擎有了解吗?
MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。
常见的引擎:Innodb、MyISAM。
InnoDB是默认的MySQL引擎,支持事务,支持行锁定和外键。
MyISAM拥有较高的插入、查询速度,但不支持事物。