栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL基础总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL基础总结

MyBatis & MySQL 面试题

作者:张佳辉

MyBatis & MySQL 面试题

MySQL 面试题

一、MySQL 基础

1、创建数据库2、查看数据库3、选择数据库4、删除数据库5、创建表6、查看定义7、查看创建的表8、更新表名9、删除表10、增加表字段11、删除表字段12、修改表字段 二、MySQL基本语法

1、插入记录2、批量记录3、更新记录4、删除记录5、查看记录6、排序7、限制记录数8、聚合:9、分组10、二次过滤11、二次汇总 三、MySQL表的连接

1、内连接2、左外连接3、右外连接4、子查询5、记录联合 四、MySQL常用数据类型

1、数值类型2、日期和时间类型3、二进制数据类型4、字符串数据类型 MyBatis面试题

一、Mybaits的优缺点二、#{} 和 ${} 的区别是什么?三、Mybatis是如何进行分页的?分页插件的原理是什么?四、Mybatis的一级、二级缓存五、Mybatis动态sql有什么用?执行原理?有哪些动态sql?六、使用MyBatis的mapper接口调用时有哪些要求?七、MyBatis 如何防止sql注入

MySQL 面试题 一、MySQL 基础 1、创建数据库
create database test1;
2、查看数据库
show databases;
3、选择数据库
use mysql;
4、删除数据库
drop database test1;
5、创建表
CREATE  [TEMPORARY]  TABLE  [IF NOT EXISTS] [database_name.] 
(
      [[not] null], ......
)

注:TEMPORARY:指明创建临时表
  IF NOT EXISTS:如果要创建的表已经存在,强制不显示错误消息
  database_name:数据库名
  table_name:表名
  column_name:列名
  data_type:数据类型*

6、查看定义
desc emp;
7、查看创建的表
show create table emp ;
8、更新表名
alter table emp rename users;
9、删除表
drop table emp;
10、增加表字段
alter table emp add column age int(3);
11、删除表字段
alter table emp drop column age;
12、修改表字段
alter table emp modify ename varchar(30);

alter table emp change age age int(4);


二、MySQL基本语法 1、插入记录
//指定字段,
//自增,默认值等字段可以不用列出来,没有默认值的为自动设置为NULL
insert into emp (ename,hiredate,sal,deptno) values ('jack','2000-01-01','2000',1);

//可以不指定字段,但要一一对应
insert into emp values ('lisa','2010-01-01','8000',2);
2、批量记录
insert into emp values ('jack chen','2011-01-01','18000',2),('andy lao','2013-01-01','18000',2);
3、更新记录
update emp set sal="7000.00" where ename="jack";

update emp e,dept d set e.sal="10000",d.deptname=e.ename where e.deptno=d.deptno and e.ename="lisa";
4、删除记录
//请仔细检查where条件,慎重
delete from emp where ename='jack';
5、查看记录
//查看所有字段
select * from emp;

//查询不重复记录
select distinct(deptno) from emp ;
select distinct(deptno),emp.* from emp ;

//条件查询
//比较运算符: > < >= <= <> != ...
//逻辑运算符: and or ...
select * from emp where sal="18000" and deptno=2;
6、排序
//desc降序,asc 升序(默认)
select * from emp order by deptno ;
select * from emp order by deptno asc;
select * from emp order by deptno desc,sal desc;
7、限制记录数
select * from emp limit 1;
select * from emp limit 100,10;
select * from emp order by deptno desc,sal desc limit 1;
8、聚合:
select count(id) from emp ;
select sum(sal) from emp ;
select max(sal) from emp ;
select min(sal) from emp ;


9、分组
//分组统计
select count(deptno) as count from emp group by deptno;
select count(deptno) as count,deptno from emp group by deptno;
select count(deptno) as count,deptno,emp.* from emp group by deptno;
10、二次过滤
select count(deptno) as count,deptno from emp group by deptno having count > 2;
11、二次汇总
select count(sal),emp.*  from emp group by sal, deptno with rollup ;
三、MySQL表的连接

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录;right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录;inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行;full join:外连接,返回两个表中的行:left join + right join;cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。 1、内连接

select * from emp as e,dept as d where e.deptno=d.deptno;
select * from emp as e inner join dept as d on e.deptno=d.deptno;


2、左外连接
select * from emp as e left join dept as d on e.deptno=d.deptno;


3、右外连接
select * from emp as e right join dept as d on e.deptno=d.deptno;


4、子查询
//=, !=
select * from emp where deptno = (select deptno from dept where deptname="技术部");
select * from emp where deptno != (select deptno from dept where deptname="技术部");

//in, not in 
//当需要使用里面的结果集的时候必须用in(); 
select * from emp where deptno in (select deptno from dept where deptname="技术部");
select * from emp where deptno not in (select deptno from dept where deptname="技术部");

//exists , not exists
//当需要判断后面的查询结果是否存在时使用exists();
select * from emp where exists (select deptno from dept where deptno > 5);
select * from emp where not exists (select deptno from dept where deptno > 5);
5、记录联合
union:返回去重之后的结果
select ename from emp union select ename from emp;

union all:返回所有结果
select ename from emp union all select ename from emp;
四、MySQL常用数据类型 1、数值类型

上标;下标

数据类型存储范围字节
tinyint[(m)]有符号值:-128 至 127
无符号值:0 至 255
1
smallint[(m)]有符号值:-215 至 215-1
无符号值:0 至 216
2
mediumint[(m)]有符号值:-222 至 223-1
无符号值:0 至 224-1
3
int[(m)]有符号值:-231 至 231-1
无符号值:0 至 232-1
4
bigint[(m)]有符号值:-263 至 263-1
无符号值:0 至 264-1
8
float[(m, d)]最小非零值:±1.175494351e - 384
double[(m, d)]最小非零值:+2.2250738585072014e - 3088
decimal (m, d)可变;其值的范围依赖于m和dm(mysql < 3.23)
m+2(mysql > 3.23)
2、日期和时间类型
数据类型存储范围字节
DATE1000-01-01 至 9999-12-314
TIME-838:59:59 至 838:59:593
DATETIME1000-01-01 00:00:00 至 9999-12-3123:59:598
TIMESTAMP19700101080001 至 203801191114074
YEAR1901 至 21551
3、二进制数据类型
数据类型说明
TITYBLOB最大长度为255字节
BLOB最大长度为64KB
MEDIUMBLOB最大长度为16MB
LONGBLOB最大长度为4GB
4、字符串数据类型
数据类型说明
CHAR1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1)
VARCHAR可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串
TINYTEXT同TEXT,最大长度为255字节
MEDUIMTEXT同TEXT,最大长度为16K
TEXT最大长度为64K的变长文本
LONGTEXT同Text,最大长度为4GB(纯文本,一般不会到4G)
ENUM接受最多64K个串组成的预定义集合的某个串
SET接受最多64K个串组成的预定义集合的零个或多个串
MyBatis面试题 一、Mybaits的优缺点

(1)优点:

① 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。

② 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;

③ 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。

④ 能够与Spring很好的集成;

⑤ 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

(2)缺点:

① SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。

② SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

二、#{} 和 ${} 的区别是什么?

${}是字符串替换,#{}是预处理;

Mybatis在处理 时 , 就 是 把 {}时,就是把 时,就是把{}直接替换成变量的值。而Mybatis在处理#{}时,会对sql语句进行预处理,将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

使用#{}可以有效的防止SQL注入,提高系统安全性。

三、Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

四、Mybatis的一级、二级缓存

(1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

(2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 ;

(3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear 掉并重新更新,如果开启了二级缓存,则只根据配置判断是否刷新。

五、Mybatis动态sql有什么用?执行原理?有哪些动态sql?

Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断 并动态拼接sql的功能。

Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind。

六、使用MyBatis的mapper接口调用时有哪些要求?

Mapper接口方法名和mapper.xml中定义的每个sql的id相同;Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同;Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同;Mapper.xml文件中的namespace即是mapper接口的类路径。 七、MyBatis 如何防止sql注入

    检查变量数据类型和格式;过滤特殊符号;绑定变量,使用预编译语句;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号