MySQL

隔离级别

索引底层

mysql优化

事务ACID原则

事务:要么都成功,要么都失败

ACID原则:

原子性:要么都成功,要么都失败

一致性:事务前后的数据完整性要保持一致

隔离性:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离

持久性:事务一旦提交则不可逆,被持久化到数据库中

隔离所导致的问题:

脏读:一个事务读取了另一个事务未提交的数据

不可重复读:多次读取的某一行数据的结果不同(不一定是错误,只是某些场合不对)

幻读(虚读):在一个事务内读到了其他事务插入的数据,导致前后读取不一致

 

三大范式

1NF

原子性:保证每一列不可再分

2NF

前提:满足第一范式

每张表只描述一件事情

3NF

前提:满足第一二范式

确保数据表中的每一列数据都和主键直接相关,而不能间接相关

规范性和性能问题

关联查询的表不超过3张,考虑商业化的需求和目标(成本,用户体验),数据库的性能更加重要,有时会故意给某些表增加一些冗余字段,从多表查询变为单表查询,还会故意增加一些计算列,从大数据量查询降低为小数据量的查询

 

JDBC程序

package com.yl.servlet;

import java.sql.*;

public class JDBCDemo {
   public static void main(String[] args) throws SQLException, ClassNotFoundException {
       //1.加载驱动
       Class.forName("com.mysql.jdbc.Driver");//固定写法,加载驱动,具体写法查询版本

       //2.用户信息和url
       String url = "jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=true";//useSSL=false
       String username = "root";
       String password = "1234";

       //3.连接成功,数据库对象
       Connection connection = DriverManager.getConnection(url, username, password);

       //4.执行SQL的对象
       Statement statement = connection.createStatement();

       //5.执行SQL的对象去执行SQL,可能存在结果,查看返回结果
       String sql = "";
       ResultSet resultSet = statement.executeQuery(sql);//执行查询操作
       statement.execute(sql);//执行任何操作都可
       statement.executeUpdate();//更新、插入、删除操作都可

       //如果是查询
       while(resultSet.next()){
           //查看代码
      }

       //6.释放连接
       resultSet.close();
       statement.close();
       connection.close();
  }
}

 

MySQL索引背后的数据结构及算法原理

posted @ 2020-08-24 10:48  Fabulo  阅读(389)  评论(0)    收藏  举报