阐述jdbc操作数据库的步骤
- 得到数据库的数据源
- 建立数据库连接connection
- 书写sql语句
- 执行对象preparestatement
- 执行sql语句
- 如果是查询操作,获取结果集resultset,处理结果集
讲一下数据库的左连接右连接 ?
- 左连接又称为左外连接,是外连接中的一种,他的关键字是
left join on
/left outter join on
- 在两个表的查询中,左连接时左表的记录会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为null
- 右连接关键字是
right join on
/right outter join on
,查询结果和左连接相反
数据库三范式
一般指在利用关系型数据库建表时普遍需要遵循的三个规范
- 第一范式要求建表时要保证列的原子性,也就是一个字段只存储一项信息,而不能是集合,数组等非原子数据项
(例如,在个人信息表中的电话属性,可能是座机号,也可能是手机号,具有可分割性,因此不符合1nf)
- 第二范式在第一范式的基础上要求所有字段都依赖于主键,不存在对主键的部分依赖(例如一个表中有学号,课程,课程学分,成绩四个属性,其中所有非主键列
(成绩,课程学分)都依赖于主键 (学号,课程)。 但是还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分‘ 依赖于部分主键列 ’课程‘,不符合第二范式。)
- 第三范式在第二范式的基础上要求每列都与主键有直接关系,不存在传递依赖
(成绩依赖于姓名(非主键),姓名依赖于学号(主键),这样成绩就传递依赖于学号,不符合第三范式)
数据库查询 模糊查询
张%
select * from t where name like '张%';
数据库了解多少,写一个更新数据库中记录的sql语句,表你自己定
update t set name = "001" where id = 10;
数据库的增、删、改、查,去重,左右连接?
增
insert into t values(1,'jj','math');
删
delete from t where id = 1;
改
update t set name = 'xx' where id = 1;
查
select * from t where id = 1;
去重
select distinct name from t;
左右连接
select * from a left join b on a.id = b.id;
select * from a right join b on a.id = b.id;
索引的概念、如何去优化?索引提到了b树
数据库索引底层原理与优化,面试重点考点!!!(强烈建议看一看,点击)
- 索引是提高查询数据速度的数据结构
- 索引的优化就是查询算法上的优化-btree索引
- mysql支持的索引类型有btree索引,哈希索引等
对于btree索引的优化策略:
- 最左前缀匹配原则
- 对 where,on,group by,order by 中出现的列使用索引
- 对较小的数据列使用索引
- 尽量的扩展索引,不要新建索引
- 不要过多创建索引(会影响插入、删除数据的速度)
什么是数据库的表连接?具体说一下
表与表之间根据关联字段"连接"(join)在一起,组合成一个数据集。
- 内连接(inner join)交集
- 外连接(outer join)交集的补集
- 左外连接(left outer join)
- 右外连接(right outer join)
- 左连接(left join)
- 右连接(right join)
- 全连接(full join)
都是字面意思,理解一下就行了
数据库中的索引原理索引失效的场景?
- 列与列对比(两个列math,english都单独建立了索引,查询时条件为math = english)
- 存在null值条件(
select * from student where id is not null;
) - like 通配符 :使用前置通配符
- 条件上包括函数:
select * from test where upper(name)='sunyang'; --不是对索引列计算
select * from test where name=upper('sunyang');--会走索引
- 数据类型的转换:id为number类型,
select * from sunyang where id='123'
; - 谓词运算:对索引列进行函数运算
如何快速的清空数据库中的一个表,但是不可以改变表的结构,还可以继续往里面写数据?
truncate table table_name;
delete * from table_name;
truncate、delete 清空表数据的区别 :
- truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢
- truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
索引的创建?为一个已经存在的表添加主键索引?
create index index1_id on student(id);
mysql语句查询成绩大于60分的学生的信息
select * from t where grade > 60;
查询平均成绩大于60分的学生的信息,并按降序排列
select 8 from t where avg(grade) > 60 order by grade desc;
讲一下联合主键和符合主键
- 联合主键:其实就是一张中间表,在多张表之间,需要每个表中的主键组成联合主键,这样就可以查到每个表中的每个记录,联合主键不能为空,否则违背主键唯一性原则
- 复合主键:当只有一个字段作为主键是,会有重复的情况,这是需要两个(以上)字段作为共同主键
- 若表已存在,
alter table t add primary key(id)
- 若表中已有主键,先
alter drop
,再创建
- 若表已存在,
忘记数据库密码用什么命令查询
bin>net stop mysql//进入 mysql 的 bin 目录下,打开 cmd ,关闭 mysql 数据库。
bin>mysqld --skip-grant-tables//启动 mysql 服务的时候跳过权限表认证
bin>mysql
mysql>use mysql
mysql>update user set password=password("123456") where user="root";
mysql>flush privileges;//刷新权限
mysql>quit
bin>mysqladmin -u root -p shutdown//修改root密码后需要执行该语句
bin>net start mysql//重启
mysql事务的四大特性(acid)
- 原子性
- 一致性
- 隔离性
- 持久性
事物隔离级别
- 读已提交
- 读未提交
- 可重复化
- 可串行化
事务隔离级别,事务操作,acid详解(面试重点,强烈建议看一看,点击)
什么是死锁,死锁如何处理?
事务循环等待数据锁,则会死锁。
死锁处理:预防死锁协议,死锁恢复机制