事务和三大范式和JDBC_day07

三大范式

数据库的范式:是设计数据库一种规范要求,每一个范式呈递次规范;
	第一范式1NF:数据库表中每一列是不可在拆分的原子性,不能出现复合列!(集合数据)
	第二范式2NF:在1NF基础上,每一张表描述一件事情;非主键字段完全依赖于主键字段;
	第三范式3NF:在2NF基础上,非主键字段和主键字段不能产生传递依赖,使用外键约束来操作数据库的三大范式
	1NF:数据库表中的每一列不可在拆分的原子数据项,必须独立的列;
	2NF:在1NF基础上,数据库表中非主键字段必须完全依赖于主键字段,完全依赖是指不能存在仅依赖主键一部分的列。
	3NF:在2NF基础上,任何非主列不得传递依赖于主键。 
	
举例:
1NF:
	员工表每个员工只有一个员工ID,只有一个姓名,一个性别,只属于一个部门,但是在我们的实际生活中,每个人真的只有一个联系电话吗?这里是假设最少的情况,每个人都有个人电话和家庭电话,那么联系电话这一字段就是可再分的。这张表的结构设计就没有达到第一范式。
	解决方案:把联系电话这一字段分为个人电话字段和家庭电话字段,就完全符合了第一范式

事务

事务:是关系型数据库的一种机制: 当批量操作sql或者多张表同时操作(update,inseret into,delete),这些语句的执行要么同时执行成功,要么同时执行失败;当执行成功了,将事务提交,直接影响数据的记录数;当执行失败,需要回滚事务;
		应用场景:
			在某些业务中,同时操作(update,inseret into,delete)多张表的时候(同时执行多个sql),就需要开启事务,否则在执行多个sql中如果出现异常,一部分成功,一部分失败,就会导致数据紊乱!
				
			举例:	
				提交订单----->生成订单---给order以及order_item都需要插入数据
					订单表 order
					订单项表 order_item									
					商品表 product

数据库事务的特点以及隔离级别

事务的特点:ACID
    原子性:针对数据的操作要么同时成功,要么同时失败
    一致性:数据的操作前后数据总量不变的
    隔离性:事务就是管理业务操作,业务和业务独立,那么事务和事务是互相不影响的,是分离!
    持久性:针对数据的操作,如果提交事务了,即使关机,数据永久保存!
事务的隔离级别:
	read uncommitted; 读未提交
	read committed ;读已提交
	repeatable read ;可重复读,有效防止脏读以及不可重复读 (mysql的默认隔离级别)
	serializable ; 串行化(序列化) 隔离级别最高,安全性最高,效率最低!

jdbc本质

Java数据库连接,java可以操作各种关系型数据库
本质就是一个普通的java类,数据库厂商提供的驱动jar包,来实现sun公司提供一套"应用程序接口规范"
		java.sql.Drvier 驱动接口
		java.sql.DriverManager:驱动管理类(管理jdbc的驱动服务)
		java.sql.Connection:与特定数据库的一种会话连接
		java.sql.Statement:执行静态sql语句 (执行对象,操作数据库)

JDBC的基本操作步骤

jdbc原生7大操作步骤 入门
	1)注册驱动
 	2)获取数据库的连接对象
 	3)准备好的sql语句
 	4)获取数据库的执行对象---执行sql语句
 	5)数据库的执行对象 去操作数据库
 	6)返回结果
 	7)释放资源
 	
public class JdbcDemo {
    public static void main(String[] args) throws Exception {

    //1)导包并且注册驱动
    	Class.forName("com.mysql.jdbc.Driver") ; 
    	//mysql5.1以上5.7以下 的jar包"com.mysql.jdbc.Driver"
    	//mysql8.0的jar包 "com.mysql.cj.jdbc.Driver"
	//2)获取数据库的连接对象
        //java.sql.DriverManager:里面有静态方法获取数据库连接对象
       	// public static Connection getConnection(String url,  //统一资源定位符
        // String user,  // 当前mysql的用户名 root 用户
        // String password)throws SQLException    //当前mysql的登录密码
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/myee_2203_02",//库名
                //使用的mysql驱动包5.7以上包括5.7以及8.0的包
                //"jdbc:mysql://localhost:3306/myee_2203_02?			characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"
                "root",
                "root"
        );//alt+enter键 :补全代码
	//3)准备好的sql语句
        String sql = "insert into accout(name,balance) values('园园',1000)";
	//4)获取数据库的执行对象---执行sql语句
        //通过连接对象获取 Connection--- Statement createStatement():创建执行对象,准备将sql发送数据库
        Statement stmt = conn.createStatement();

	//5)数据库的执行对象 去操作数据库
        //Statement--->int executeUpdate(String sql)

        int count = stmt.executeUpdate(sql);
	//6)返回结果
        System.out.println("影响了"+count+"行");
	//7)释放资源
        stmt.close();
        conn.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值