1.列举常见的关系型数据库和非关系型数据库都有哪些
关系型数据库:
oracle,mysql
非关系型数据库:
MongoDB,redis
关系型数据库的特性:
1.关系型数据库,是指采用了关系模型来组织数据的数据库
2.关系型数据库的最大特点就是事务的一致性
3.关系模型指的就是二维表格模型
关系型数据库的优点:
1.容易理解
2.便用方便
通用的sql语言使得操作关系型数据库非常方便
3.易于维护
丰富的完整性大大降低了数据冗余和数据不一致的概率
4.支持sql
可用于复杂的查询
关系型数据库的缺点:
1.读写性能比较差
2.固定的表结构
3.高并发读写需求
4.海量数据的高效读写
非关系型数据库:
1.使用键值对存储数据
2.分布式
3.一般不支持ACID特性
4.非关系型数据库严格上不是一种数据库,而是一种数据结构化存储方法的几个
优点:
无需经过sql层的解析,读写性能很高
基于键值对,数据没有耦合性,容易扩展
缺点:
不提供sql
无事务处理
2.Mysql常见数据库引擎及比较
Myisam:
默认的插件式存储引擎。
InnoDB:
用于事务处理应用程序,具有众多特性,包括ACID事务支持
Memory:
将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可以提供极快的访问
3.简述数据三大范式
第一范式:原子性
字段不可再分,否则将不是关系型数据库
第二范式:唯一性
一个表只能说明一个事物
第三范式:每列都与主键有直接关系,不存在传递依赖
非主键字段不能相互依赖
4.什么是事务,mysql如何支持事务
只有存储引擎为INNODB的MYSQL数据库才支持事务
事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行要么全部不执行
ACID事务的四个特点:
A:原子性
要么全部完成,要么全部不完成
C:一致性
在事务开始之前和事务结束之后,数据库的完整性没有被破坏
I:隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力
D:持久性
事务处理结束后,对数据库的修改是永久的
Mysql事务处理主要有两种方法:
1.用BEGIN,ROLLBACK,COMMIT来实现
BRGIN开始一个事务
ROLLBACK事务回滚
COMMIT事务确认
2.直接用SET来改变MYSQL的自动提交模式
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
事务做持久化是为了应对数据库奔溃的情况
5.简述数据库设计中一对多和多对多的应用场景
一对多:
一个球队拥有多名球员,而一名球员只应对应一个球队,球队和球员的关系就是一对多的关系
多对多:一们课程有若干个学生选修,一个学生可以同时选修多们课程
6.如何基于数据库实现商城商品计数器
创建一个商城表--包含(id,商品名,每一个商品对应的数量)
create table product
(id primary key auto_increment,
pname varchar(64),
pcount int);
7.常用sql
1.创建数据库
create database mydata2.选择
select* fromtable1 where 范围3.插入
insert into table1(field1,field2) values(value1,value2)4.删除
deletefromtable1 where 范围5.更新
update table1 set field1=value1 where 范围6.查找
select* from table1 where field1 like '%value1%'
7.排序
select* fromtable1 order by field1,field2 desc8.总数
select count as totalcountfromtable19.求和
select sum(field1) as sumvaluefromtable110.平均
select avg(field1) as avgvaluefromtable111.外联
select a.a,a.b,a.c,b.c,b.d,b.ffrom a left join b on a.a=b.c
8.简述触发器,函数,视图,存储过程
触发器是一个特殊的存储过程,它是mysql在insert,update,delete的时候自动执行的代码块
create trigger trigger_name
after/bofore insert/update/delete on 表名
for each row
begin
sql语句:
end
触发器针对每一行
视图是一个虚拟表,其本质是根据sql语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,并可以将其当作表来使用
存储过程
一组可以编程的函数,是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行
优点:
将重复性很高的一些操作,封装到一个存储过程中,简化了对这些sql的调用
批量处理:sql+循环,减少流量
统一接口,确保数据安全
9.mysql索引种类
普通索引
唯一索引
索引列的值必须唯一,但允许有空值
主键索引
一种特殊的唯一索引,一个表只能有一个主键,不允许有空值
组合索引
全文索引
索引大大提高查询速度,降低更新表的速度
索引需要花时间进行优化
10.索引在什么情况下遵循最左前缀规则
比如我们想在a,b,c三个字段上建立一个联合索引,这里我们就需要选择优先级
11.主键和外键的区别
主键是能缺点一条记录的唯一标识
外键用于另一张表的关联
12.mysql常见的函数
聚集函数
agv,count,max,min,sum
处理字符串的函数
字母大小写转换去空,替换
处理数值的函数
绝对值,向上取整,四舍五入
13.列举创建索引但是无法命中索引的8种情况
1.条件中有or
2.多列索引,不是使用的第一个
3.like查询以%开头
4.列类型是字符串,但是没有用引号引起来
5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引
14.如何开启慢日志查询
slow_query_log # 是否开启慢日志查询,默认off
slow_query_log_file #慢日志文件存储位置
log_queries_not_using_indexes #是否把没有使用到索引的sql记录到日志中,默认off
long_query_time #超过多少秒的查询才会记录到日志中,单位是秒
15.数据库导入导出命令(结构+数据)
导出某个数据库
mysqldump -u root -p data > test.sql
16.数据库优化方案
数据结构,sql,索引是低成本方案
硬件是高成本方案
17.char和varchar的区别
char定义的列长度固定,范围是0~255
varchar定义的列长度是可变长度
18.简述mysql的执行计划
select_type
type
ref
extra
19.在对name做了唯一索引的前提下,简述以下区别:
select * from tb where name = ‘Oldboy-Wupeiqi’
select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1
20.什么是索引合并
把几个索引的范围扫描合并成一个索引