索引
索引的概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,
并指定索引的类型,各类索引有各自的数据结构实现
索引的作用
1.数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
2.索引所起的作用类似书籍目录,可用于快速定位、检索数据。
3.索引对于提高数据库的性能有很大的帮助。
创建索引
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建
对应列的索引。
show index from 表名
对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名);
删除索引
drop index 索引名 on 表名;
事务
事务的概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。
事务的使用
(1)开启事务:start transaction;
(2)执行多条SQL语句
(3)回滚或提交:rollback/commit
start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;
JDBC
JDBC的概念
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是
Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
优势
JDBC优势:
1.Java语言访问数据库操作完全面向抽象接口编程
2.开发数据库应用不用限定在特定数据库厂商的API
3.程序的可移植性大大增强
JDBC的使用
1.创建并初始化一个数据源并建立数据库链接
//1. 创建并初始化一个数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/learn01?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");
//2. 和数据可服务器建立连接
Connection connection = dataSource.getConnection();
- 构建 SQL 语句
//3. 构造 SQL 语句
System.out.println("请输入学号");
int id = scanner.nextInt();
System.out.println("请输入姓名");
String name = scanner.next();
System.out.println("请输入班级号");
int classId = scanner.nextInt();
String sql = "insert into student values (?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
statement.setInt(3,classId);
System.out.println(statement);
- 执行 SQL语句
//4. 执行 SQL 语句
int ret = statement.executeUpdate();
System.out.println(ret);
- 释放必要资源
//5. 释放必要资源
statement.close();
connection.close();
常见问题
数据库的连接方式
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
一种是通过DriverManager(驱动管理类)的静态方法获取
一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象。
区别:
- DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源
时,通过connection.close()都是关闭物理连接。 - DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将
Conncetion连接对象回收。
Statement对象
Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。
1.Statement 用于执行不带参数的简单 SQL 语句
2.PreparedStatement 用于执行带参数或不带参数的 SQL语句 ,SQL语句会预编译在数据库系统,执行速度快于 Statement 对象
3.CallableStatement 用于执行数据库存储过程的调用