Java学习-Mysql(下)
目录
发布成功 (csdn.net) :上半部分 (基础)
28、事务ACID原则、脏读、不可重复读
29、测试事务实现转账
30、索引介绍及索引的分类
31、SQL编程创建100万条数据测试索引
32、索引原则和明日安排
33、数据库用户管理
34、MySQL备份
35、如何设计一个项目的数据库
36、数据库的三大范式
37、数据库驱动和JDBC
38、第一个JDBC程序
39、JDBC中对象解释
40、Statement对象详解
41、SQL注入问题
42、PreparedStatement对象
43、使用IDEA连接数据库
44、JDBC操作事务
45、DBCP-C3P0连接池
28、事务ACID原则、脏读、不可重复读
- 事务原则:ACID
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency)
事务前后数据的完整性必须保持一致。
- 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
- 隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
- 隔离产生的问题:
- 脏读:
- 不可重复读
- 虚读
29、测试事务实现转账
mysql默认自动开启事务:
事务执行过程:
一组事务的提交:(回滚后回到上一次提交的状态)
30、索引介绍及索引的分类
- MysQL官方对索引的定义为:索引(ndex)是帮助MySQL高效获取数据的数据结构。提取句子主千,就可以得到索引的本质:索引是数据结构。
- 索引分类:
- 主键索引 primary key(不可重复,只能有一个列为主键)
- 唯一索引 UNIQUE KEY (避免重复列出现,多个列都可标识为唯一索引)
- 常规索引 KEY/INDEX (默认的)
- 全文索引 FullText(特定数据库引擎才有,目的也是快速定位数据)
基础语法:

31、SQL编程创建100万条数据测试索引
写一个函数

结果(55s):

创建索引后,搜索时间缩短到毫秒级别:

32、索引原则和明日安排
- 经常变动的数据不加索引
- 数据量较小没有必要加索引
索引数据结构:
INNODB默认btree,
了解底层原理:CodingLabs - MySQL索引背后的数据结构及算法原理
33、数据库用户管理
权限管理:

34、MySQL备份
方式:
- 直接物理备份文件
- 在sqlyog里手动导出
- 命令行 mysqldump导出
导入:
35、如何设计一个项目的数据库

bbs论坛系统、crm管理系统、blog博客系统

36、数据库的三大范式
数据规范化:避免 信息重复、更新异常、插入异常
- 1NF:每一个字段都要是不可分的原子项
- 2NF:满足1NF,且每张表只描述一件事情
- 3NF:在2NF上消除传递依赖
- 规范性和性能不可兼得:
37、数据库驱动和JDBC
数据库驱动:
java.sql
javax.sql
38、第一个JDBC程序

useSSL在sql版本高于connect时候应该改为false:
SHOW CREATE DATABASE dbestudy;
/*
CREATE DATABASE `dbestudy`
/*!40100 DEFAULT CHARACTER SET utf8mb3 */
/*!80016 DEFAULT ENCRYPTION='N'
*/
SHOW CREATE TABLE users
CREATE TABLE `users` (`id` INT NOT NULL,`NAME` VARCHAR(40) DEFAULT NULL,`PASSWORD` VARCHAR(40) DEFAULT NULL,`email` VARCHAR(60) DEFAULT NULL,`birthday` DATE DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb3
package com.xinge.learning01;import java.sql.*;//jdbc测试程序
public class JdbcTest01 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//创建信息String url = "jdbc:mysql://localhost:3306/dbestudy?useUnicode=true&characterEncoding=utf8&useSSL=false";String name = "root";String password = "31415926xG";//连接数据库对象Connection connection = DriverManager.getConnection(url,name,password);//执行对象Statement statement = connection.createStatement();String sql = "SELECT * FROM users";ResultSet resultSet = statement.executeQuery(sql);while(resultSet.next()){System.out.println("id="+resultSet.getObject("id"));System.out.println("name="+resultSet.getObject("NAME"));System.out.println("pwd="+resultSet.getObject("PASSWORD"));System.out.println("email="+resultSet.getObject("email"));System.out.println("birth="+resultSet.getObject("birthday"));}//释放resultSet.close();statement.close();connection.close();}
}
39、JDBC中对象解释

40、Statement对象详解



40、Statement对象详解_哔哩哔哩_bilibili
41、SQL注入问题
SQL存在漏洞,可能被攻击 ,sql会被拼接
42、PreparedStatement对象
这个对象不会被拼接,可以避免sql注入问题,而且效率更高

43、使用IDEA连接数据库

44、JDBC操作事务


如果失败默认回滚,没有必要显式定义
45、DBCP-C3P0连接池
- 数据库连接-释放十分浪费资源,可以预先准备资源,后面直接连接准备好的资源
- 最小连接数一般设置为最小连接数,业务最高承载上限是最大连接数,超过最大连接的等待,
- DataSource接口
- 开源数据源实现(DBCP、C3P0,Druid阿里巴巴),使用此方法就不用手写代码连接数据库了
- DBCP加入jar包:
- C3P0导入jar包:

DBCP实例:
测试类:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
















