MySql八股文

257 阅读6分钟

1、如何通过JDBC访问数据库

jdbc:java数据库连接,jdbc定义了一套操作所有关系型数据库的接口(规则),通过jdbc访问数据库一般有以下步骤:

(1)加载jdbc驱动器,通俗jdbc的jar包,maven项目导一个依赖即可

(2)加载jdbc驱动,并将其注册到DriverManager中,一般使用反射:Class.forName(String driver)

(3)建立数据库连接,取得Connection对象;一般通过DriverManger.getConnection(url,username,password)方法实现,url代表连接数据库的地址,username表示连接数据库的用户名,password表示连接数据库的密码

(4)建立statement对象或是PreparedStatement对象,一般使用使用connection对象创建

(5)执行Sql语句

(6)访问结果集对象ResultSet对象

(7)依次将ResultSet、statement、preparedstatement、connection关闭,释放掉所占用资源,为什么这样做?原因在于Jdbc驱动在底层通常是通过网络IO实现SQL命令与数据传输。

2、Jdbc事务

1、事务的概念 (1)事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。使用connection对象来管理事务,操作事务的一般步骤:

a、开启事务;使用setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即可开启事务,记住一定要在sql执行之前开启事务

b、提交事务:commit()在所有代码执行完毕后,调用commit方法,提交事务

c、回滚事务:在出现异常时,可以使用rollback方法进行回滚事务

2、事务的四大特征 a、原子性:最小的操作单位,要么同时成功,要么同时失败

b、持久性:当事务提交或者回滚后,数据控会持久化保存数据

c、隔离性:多个事务之间,相互独立

d、一致性:事务操作前后,数据总量不变

3、jdbc有哪些隔离级别 隔离级别:多个事务之间是隔离的、相互独立的。但是多个事务操作一批数据(多个线程请求相同数据),则会引发一些问题,设置不同的隔离级别,可以解决这些问题: a、存在脏读:一个事务读取到另一个事务中没有提交的数据

b、不可重复读(虚读):在同一个事务中,两次读取到的数据不一样

c、幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改

4、隔离级别 a、read uncommitted :读未提交,会产生的问题:脏读、不可重复读、幻读

b、read committed:读已提交:产生问题:不可重复读,幻读

c、repeattable read:可重复读,产生问题:幻读(mysql默认)

d、serializable:串行化,可以解决所有问题

注意:隔离级别越高安全性越大,但是效率越来越低

3、如何避免sql注入

(1)prepareedStatement

(2)使用正则表达式过滤传入的参数

(3)字符串过滤

(4)检查是否包含非法字符、页面判断码

4、数据库的三大范式是什么

第一范式:属性不可分 第二范式:非主属性完全依赖候选码 第三范式:满足第一范式,没有部分传递依赖

5、char和Varchar的区别是什么

(1)char的长度是不可变的,而varchar的长度是可变的

例如:定义一个char[10]和varchar[10],如果存进去“abcd”,那么char所占的长度依然为10,除了“adbc”,后面还跟着6个空格,而varchar的长度立马会变为4

(2)char的存取速度比varchar要快得多,因为它的长度是固定的,方便程序的存储和查找,但是char也为此付出的是空间的代价

(3)char的存储方式是对英文符(ASCLL)占用1个字节,对一个汉字占用两个字节,而varcahr的存储方式是,对每一个英文字符占用2个字节,汉字也占用2个字节

6、MySQL的内连接、左连接、右连接有什么区别

内连接显示两个表中有联系的所有数据;左连接以左表为参照显示所有数据;右连接以右表为参照,显示所有数据。

7、说一下数据库的事务隔离

读未提交、读已提交、可重复度、可串行

8、说一下MySql常用的引擎

在mysql数据裤子,常用的引擎主要就是2个:Innodb和MyIASM

9、如何做MySQl的性能优化

(1)MySql数据表字段要选取合适的字段属性

(2)使用连接Join来代替字查询

(3)使用联合Union来代替手动创建临时表

(4)使用事务机制来完成需要多个SQl操作数据处理,保证数据的完整性和安全访问

(5)使用外接来优化关联表的性能,外键可以用来保证数据的关联性

(6)使用索引提高MySQ数据库的性能,索引时提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句中包含MAX(),MIN()和order by这些命令的时候,性能提高更为明显。 (7)通过优化查询语句提高查询速度。

什么是MYSQL主从复与读写分离

MySql主从复制就是一个异步的复制过程,底层是基于MySql数据库自带的二进制日志功能,就是一台或者多台MYSQl数据库(即是从库)从另一台MYsql数据库(即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致,mysql主从复制是MYSQL数据库自带的功能,无需借助第三方工具。

MYSQl复制过程分三步:

主库将改变记录到二进制日志(binary log)

从库将主库的binary log拷贝到它的中继日志(relay log)

从库重做中继日志中的事件,将改变应用到自己的数据库中

注意 :主库负责处理事务性的增删改查操作,从库负责处理查询操作。主从复制、读写分离就是为了数据库能支持更大的并发。