-
JDBC流程
1,加载驱动
2,获取连接
3, 创建执行对象
4, 执行sql语句
5, 处理运行结果
6, 释放资源 -
在进行数据库编程时,连接池有什么作用?
答:由于创建连接和释放连接都有很大的开销,为了提升系统访问数据库的性能,可以事先创建若干连接置于连接池中,需要时直接从连接池获取,使用结束时归还连接池而不必关闭连接,从而避免频繁创建和释放连接所造成的开销,这是典型的用空间换取时间的策略。池化技术在Java开发中是很常见的,在使用线程时创建线程池的道理与此相同。基于Java的开源数据库连接池主要有:C3P0、Proxool、DBCP、BoneCP、Druid等。 -
事务的ACID是指什么?
答:
原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
一致性(Consistent):事务结束后系统状态是一致的;
隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;
持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。 -
数据库的三范式是什么?
第一范式: 列不能重复(一个列不能多个属性)
第二范式: 消除部分依赖(非主属性依赖主键全部,不是依赖主键的一部分)
第三范式: 消除传递依赖(非主属性是直接依赖于主键,还是依赖非主键列) -
mysql 的内连接、左连接、右连接有什么区别?
内连接(inner join): 显示左右两边都有的
左连接(left join): 左边的为主,右边没有对应的为null
右连接(right join): 右边为主,左边没有对应的为null(于左连接相反) -
说一下 mysql 常用的引擎?
InnoDB 和 MyISAM
区别: InnoDB的数据文件本身就是索引文件 而MyISAM的索引和数据是分开的。
存储引擎采用的是 表级锁;存储引擎既支持行级锁和事务,也支持表级锁, -
什么是存储过程?有哪些优缺点?
存储过程是一些预编译的SQL语句。
存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
优点:
1, 存储过程是一个预编译的代码块,执行效率比较高
2, 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率
3, 可以一定程度上确保数据安全 -
索引是什么?有什么作用以及优缺点?
一种可以加快sql高效获取数据的数据结构,类似书籍的目录.
索引按排列方式分:
聚集索引(主键):表记录的排列顺序和索引的排列顺序是一致的
非聚集索引:表记录的排列顺序和索引的排列顺序不一致
按类型分:普通索引、唯一索引、主键索引、全文索引
索引优势和缺点:
(1) 索引加快数据库的检索速度
(2)索引降低了插入、删除、修改等维护任务的速度
(3)索引需要占物理和数据空间
索引的底层实现: B+树(更矮更宽,查询层次更浅) -
mysql 的锁
表级锁:开销小,加锁快,不会出现死锁,发生锁冲突概率高,并发程度低。
行级锁:开销大,加锁慢,会出现死锁,发生锁冲突概率低,并发程度高。
共享锁: 排它锁又叫写锁
排他锁: 共享锁又叫读锁 -
死锁 和避免死锁的方法
当两个事务都需要获得对方持有的排他锁才能完成事务,这样就导致了循环锁等待,也就是常见的死锁类型。
myisam是表级锁,要么一次性获取所有的锁,要么就等待.不会出现死锁
在 innodb 中,除单个 sql 组成的事务外,锁是逐步获得的,这就决定了在 innodb 中发生死锁是可能的。
几种避免死锁的方法:
1、(顺序相同)在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会。
2、(获取足够级别的锁)在事务中,如果要更新记录,应该申请足够级别的锁,即排他锁,而不应先申请共享锁,更新时再申请排他锁,因为当用户申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁。
如果出现死锁,可以用 show innodb status 命令来确定最后一个死锁产生的原因。返回结果中包括死锁相关事务的详细信息,如引发死锁的 sql 语句,事务已经获得的锁,正在等待什么锁,以及被回滚的事务等。可以据此分析产生死锁的原因。 -
维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 -
触发器
触发器(TRIGGER)是MySQL的数据库对象之一。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。
触发事件:有before,after.触发事件:有insert,update,delete三种。触发类型:有行触发、语句触发 -
什么叫视图?游标是什么?
视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。 -
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。
外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。 -
如何做 mysql 的性能优化?
会放弃使用索引操作(这些都要避免使用)
1, SELECT * 会放弃使用索引,全局查找
2, 在 where 子句中使用!=或<>操作符
3, 避免在 where 子句中使用 or 来连接条件
其他优化方法:
1, 减少子查询
2, 一个表的索引不要超过6个
3, 索引列种不要有重复数据
4, 尽量使用数字型字段,
5, 不要有超过5个以上的表连接(JOIN) -
mysql 问题排查都有哪些手段?
1, 查询事务信息
select * from information_schema.INNODB_TRX;
2, 查询数据库锁等待信息
select * from information_schema.INNODB_LOCK_WAITS;
3, 手动杀掉某个进程
kill trx_mysql_thread_id;
4, 数据库客户端连接ip统计
SELECT
substr(host, 1, instr(host, ‘:’) - 1),
count()
FROM information_schema.processlist
WHERE command <> ‘Binlog Dump’
GROUP BY substr(host, 1, instr(host, ‘:’) - 1)
ORDER BY count() DESC; -
一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 ID 是几?
插入数据ID为8,自增长不受删除数据的影响
自增长列可以指定ID,但不能小于自增长的值
重置自增长列的值可以使用语句:ALTER TABLE tableName AUTO_INCREMENT=defaultValue -
char 和 varchar 的区别是什么?
在实际字符串未达到定义长度时,char会补0到定义长度,varchar不会
尾部还有空格时,char会将其去掉,varChar则不会 -
Sql的decimal、float、double类型的区别
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位) -
说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
索引有B-TREE、BIT、CLUSTER等类型。ORACLE使用了一个复杂的自平衡B-tree结构;通常来说,在表上建立恰当的索引,查询时会改进查询性能。但在进行插入、删除、修改时,同时会进行索引的修改,在性能上有一定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询条件,查询出ROWID,再根据ROWID取出需要的数据。由于索引内容通常比全表内容要少很多,因此通过先读索引,能减少I/O,提高查询性能。
参考:
https://blog.csdn.net/hectorhua/article/details/13767361
https://blog.csdn.net/qq_22222499/article/details/79060495
https://zhuanlan.zhihu.com/p/23713529?refer=passer
https://blog.csdn.net/hectorhua/article/details/13767361
https://blog.csdn.net/xy3233/article/details/86314329
https://blog.csdn.net/wang0112233/article/details/78418698
https://blog.csdn.net/xy3233/article/details/86591489