MySQL面试常见问题总结(MySQL5.5阅读总结)
2017-11-13 15:49
671 查看
全文包括了:
1.MySQL数据库的基本操作
2.MySQL数据库的存储引擎
3.MySQL数据表的基本操作
4.MySQL中常用的几个数学函数
5.MySQL中常用的几个字符串函数
6.MySQL中的数据查询
7.MySQL中的索引(MySQL索引概念)
8.索引的语法(索引的创建、删除)
数据库的基本操作
登陆
mysql -u root -p
创建
create database base_name
使用
use database base_name
显示
show databases
show database base_name
删除
drop database base_name
数据库的存储引擎
定义
数据库引擎是数据库的底层软件,数据库管理系统(DBSM)使用数据库引擎进行增删改查。
不同的数据库引擎提供不同的功能
MySQL5.5支持的主要的数据库引擎
InnoDB(默认)、MyISAM、Memory、Archive...
查看引擎类型
show engines
引擎的选择
InnoDB
提供提交、回滚等事物能力,并要求实现并发控制。
MyISAM
主要用来插入和查询,MyISAM有较高的处理效率
Memory
存放临时数据,数据量不大时选择Memory
MySQL一般使用Memory作为临时表,存放查询的中间结果
Archive
只有插入和查询操作,切支持高并发的插入,选择Archive。
适合存放归档数据,例如日志
数据表的基本操作
创建表
create table table_name( id int(10) primary key auto_increment, username varchar(20) unique, address varchar(20) not null )
查看所有表
show tables
删除表
drop table table_name
查看表结构
DESC table_name
查看建表语句
show create table table_name
修改字段类型
alter table table_name modify A int(10) not null;
修改字段位置
修改字段A 到 字段B 的后面
alter table table_name modify A varchar(20) after B varchar(20)
修改字段名
将字段名A的字段修改为B
alter table table_name change A B date
删除字段
alter table table_name drop A
添加字段
alter table table_name add A varcahr(20) unique
添加外键约束
constraint fk_stu_cls foreign key (sid) references cls(cid)
删除外键约束
alter table table_name drop foreign key fk_id_uid
修改存储引擎
alter table table_name engine=MyISAM
修改表名
alter table table_name rename new_table_name
不同的引擎之间不可以使用外键约束
MySQL的几个数学函数
取整函数
ceil(x) 向上取整(天花板)
c87e
ceil(-3.67) ---> -3
ceil(3.67) ---> 4
floor(x) 向下取整
floor(-3.67) ---> -4
floor(3.67) ---> 3
随机数
rand() 返回一个0-1之间的浮点数
rand(x) 同上,但是相同x返回的浮点数是相同的
四舍五入
round(x) 四舍五入取整数
rount(x,y) 保留小数点后 y 位
round(1.38,1) ---> 1.4
round(19.36,-1) ---> 10
y为负数时,不四舍五入直接为0
MySQL的字符串函数
统计字符个数
select length(username) from user
合并/连接字符串
concat(lastName, firstName) ---> lastNameFirstName
如果连接中有null则结果为null
concat(lastname, null, firstName) ---> null
带分隔符的合并/连接字符串
concat_WS("-","1999","1101") ---> 1999-1101
忽略null
替换字符串
insert(str,x,len,insertStr)
insert("gzy",1,2,"111") ---> 111y
insert("gzy",-1,2,"222") ---> x超出范围,返回原字符串
insert("gzy",1,1000,"333") ---> len超出范围,则替换x位置后所有的
大小写转换
lower("Gzy") -> gzy
upper("Gzy") -> GZY
填充函数
lpad(s1,len,s2) -> 当s1长度不足len则在左边填充s2
rpad(s1,len,s2) -> 当s1长度不足len则在右边填充s2
删除空格
trim(s) -> trim(" my name ") ---> my name
只会删除两侧的空格
删除指定字符串
trim('ggg' from 'aaggagsssgbggbgcccggg') -> aaasssbbccc
重复生成字符串
repeat('a',10) -> aaaaaaaaaa
比较字符串大小
strcmp(s1,s2)
s1小返回 -1
相等返回 0
s1大返回 1
获取子串
substring(s,n,length)
如果len<1则为null
匹配子串开始位置
position(s1 in s2)
position("gzy" in "asfgzysad") ---> 4
字符串逆序
reverse(s)
生成1-10之间的整数
round(rand()*10)
日期格式化
date_format(date,'%y年%m月%d日 星期 %w')
插入系统当前时间
now()
查询最后插入的ID值
last_insert_id
数据查询
去重
select distinct age from user
排序
order by field desc(降序)/asc(升序)
分组
group by field having 条件
having 是分组后查询,where是分组前查询
group by 一般与聚合函数(avg/sum/count/max/min)同时使用
分组后显示组内某一列的所有数据
select id, group_concat(myLike) from user group by id
什么情况下通配符格式正确,但是没有查出相应的记录
可能在使用通配符的时候不小心将空格加入了进去
例如 Like '%e' 查询e结尾的数据,但是e后面多了空格的话就无法正常查询。
解决方法:使用trim函数删除空格
MySQL索引概念
索引是在MySQL存储引擎中实现的
MySQL中索引的存储类型
Hash和Btree
BTree
MyISAM
InnoDB
Hash/Btree同时支持
Memory/Heap
索引的优点
创建唯一索引,可以保证数据的唯一性
可大大加快数据库的查询速度(使用索引的最主要原因)
可以加速表与表的连接
在使用group by和order by的时候,索引也可以显著减少查询中分组或排序的时间
索引的缺点
创建和维护索引需要消耗时间
索引需要占用更多的磁盘空间。
每一个索引需要占据一定的物理空间
降低了数据库的维护速度
对表中的数据进行增删改的时候,索引也会动态维护
索引的分类
普通索引和唯一索引
普通索引是MySQL中最常用的索引类型,允许重复和空
唯一索引不允许重复但是允许为空
如果是组合索引,则组合必须要是唯一
主键索引是特殊的唯一索引,不允许为null
单列索引和组合索引
单列索引:一个索引只包含一个单列
组合索引:多个字段组合创建的索引
只有在查询条件中使用了最左边的字段的时候,索引才会被使用
全文索引
FullText,允许null和重复
只有MyISAM存储引擎支持
空间索引
空间索引的列必须要声明为not null
空间索引只能在MyISAM存储引擎中使用
索引的设计原则
索引不是越多越好,如果索引过多,不但会占用更多的空间,还会影响增删改语句的性能。
进行增删改操作时,索引也会动态更新。
避免对经常更新的表建立索引。而对于经常查询的字段要尽量建立索引。
数据量较小的表不要建立索引
因为数据量小,查询花费的时间可能比遍历索引需要的时间要少
条件表达式中,为不同的值较多的列建立索引。
为不同值较少的列建立索引会影响更新的速度
当某一列能确保唯一性的时候,需要建立唯一性索引。
使用唯一索引能确保列数据的完整性并且提高查询速度
在需要频繁进行order by 和 order by的列上建立组合索引(在待排列有多个的情况下)
索引的语法
建表的时候创建
create table table_name{ .... index(bookid) }
查看索引是否被使用
explain select * from booke where bookid in (1,2,3)
各行的含义
select_type 查询的类型
primary/union/subQuery(子查询)
table from后面的表名
type 指定了当前数据表与其他数据表的关系
All/system/const/ref/index
possible_keys MySQL在搜索时可选用的各个索引
key 实际选用的索引名
key_len 索引的字节长度
ken_len越小,速度越快
创建唯一索引
create table ...{ unique index UnqId(id) }
创建组合索引
create table ...{ index mutiIdx(id,pid) }
创建全文索引
create table ...{ fulltext index fullIdx(info) } engine MyISAM
默认的InnoDB不支持全文索引
为已有表添加索引
alter table table_name add index newIdx(od)
删除索引
alter table table_name drop index newIdx
尽量使用短索引
对varchar类型进行索引,最好指定一个前缀长度。
例如varchar(255),长度限定在10-30,且多数值是唯一的,则不需要对整列索引。这样做可以提高查询速度,减少IO操作
相关文章推荐
- 【面试】【MySQL常见问题总结】【04】
- 【面试】【MySQL常见问题总结】【03】
- 【面试】【MySQL常见问题总结】【02】
- 【面试】【MySQL常见问题总结】【01】
- 【面试】【Spring常见问题总结】【03】
- MySQL5.0 与MySQL5.5 主从复制 常见问题处理方法
- ICT领域面试常见问题总结(一)
- 计算机笔试面试常见问题总结
- 【面试】【Spring常见问题总结】【06】
- 【面试】【Spring常见问题总结】【07】
- 【面试】【Spring常见问题总结】【02】
- 常见面试问题总结(持续更新)
- iOS 面试常见问题总结
- 【面试】【Spring常见问题总结】【08】
- 【面试】【Spring常见问题总结】【04】
- 总结14:面试常见问题
- 链表的一些常见笔试面试问题总结及代码
- Java多线程面试常见核心问题总结
- MySQL问题解决:-bash:mysql:command not found 分类: ubuntu 问题总结 python基础学习 software database 2014-01-22 16:00 3088人阅读 评论(1) 收藏
- PHP从零单排(十六)PHP操作MySQL常见错误信息及分析 分类: 技巧总结 2014-05-03 11:34 139人阅读 评论(0) 收藏