第三十五天

一.单表查询(作业)

二.数据库表的关系问题---->数据库三大范式

1.表和表的关系问题

一对多

/*用户和订单的关系 一个用户可以有多个订单,某个订单从属于某个用户

员工和部门的关系,一个部门有多个员工,一个员工属于某个部门的

多对多

订单表和商品表

一个订单包含多个商品 一个商品被多个订单包含

学生表和选课表

一个学生可以选多个课程

一个课程可以被多个学生选择

三.多表查询(使用最多)

笛卡尔乘积

SELECT e.*, d. * FROM employee e, dept d ;

上面查询的结果不符合实际要求,7个员工,现在出现了21个 这个就是笛卡尔乘积,针对A表的记录 和B的记录数,两个表的记录相乘 出现笛卡尔乘积的原因:没有设置连接条件!

内连接

隐式:select 指定字段 from 表1,表2 where 连接关系

-- 多表查之内连接() /* 隐式内连接:where条件---多去使用这种查! select 字段列表 from 表名1,表名2...表名n where 这些表之间的连接条件; */ -- 需求:查询员工表和部门表的所有信息 SELECT e.id '员工编号', e.name '姓名', e.gender '性别', e.salary '工资', e.join_date '入职日期', e.dept_id '员工所在的部门', d.id '部门编号', d.name '部门名称' FROM employee e, dept d WHERE e.dept_id = d.id

显示:select 指定字段 from

外连接

子查询:select 嵌套 select....

四.数据库的事务/事务的特点/事物的隔离级别

1.引入事务

转账操作-------------->整个业务在执行多个sql语句的时候,尤其添加删除修改需要使用事务

管理,防止出现某条sql执行了,后面没有执行,造成数据紊乱;

2.mysql中如何管理事务--单独指令

1)start transaction:开启事务---在操作多个sql语句之前,将整个业务操作管理起来自动提交事务怯寒手动提交事务

2)执行你的业务操作:多个sql语句或者多张表的sql(增删改)

如果中间出现了问题,可以回滚---rollback;(回滚到操作sql之前的状态)

3)然后提交事务------>commit;事务不提交,数据只是临时改变,数据无法永久更新!只是当前

这个绘画是改变的,当这个会话关闭(断开连接),数据还是之前的数据!

3.事务指令

-- 开启事务

START TRANSACTION;

-- 操作多个sql语句或多张表的sql(同时增删改)

UPDATE account SET balance = balance -500 WHERE id =1;

-- 出问题了

UPDATE account SET balance = balance +500 WHERE id =1;

-- 事务回滚

ROLLBACK;

-- 提交事务

COMMIT;

关系型数据库传统事务:ACID

A原子性:在使用事务管理的时候,执行多个sql增删改,哟啊么同时执行成功,要么同时执行失败;

C一致性:高并发的时候,需要保证事务多次读写,保证数据一致性!

I隔离性:事务和事务之间独立相互不影响

D持久性:事务一旦提交,对数据的影响是永久性,即使关机了,数据依然在更新

-- 事务的隔离级别

READ UNCOMMITTED:读未提交 --->脏读:事务管理中最严重的问题,一个事务读取到另一个没有提交

的事务

READ COMMITTED:读已提交 --->有效防止脏读,出现了一个问题"不可重复读",打破了一致性,多次读取到的事务不一致

REPEATABLE READ:可重复读 (mysql的默认隔离级别)---->可重复读,有效脏读,不可重复读,出现幻读

(一般有更新操作影响了数据)

SERIALIZABLE:串行话(最安全的隔离,但效率低)

SELECT TRASACTION_ISOLATION; mysql8.0以后的查看事务的隔离级别

-- mysql5.7以前查看事务隔离级别

SELECT @@tx_isloation;

-- 设置隔离级别

SET GLOBAL TRANSACTION ISOLOATION LEVEL 级别的名称

五.JDBC 连接数据库

package Test;
​
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
​
public class java_mysql_jar {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //jdbc连接数据库,java连接mysql
        //1.导入驱动jar包
        //2.注册驱动
        Class.forName("Test.java_mysql_jar");
        //3.获取数据库连接对象               编码格式            是否启用证书认证   服务器时区     是否公钥模式
        //jar或mysql是8.0以上url后面带上?CharacterEncoding=utf8&useSSL=false&ServerTimezone=UTC&allowPublicKeyRetrieval=true
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/myee_2211","root","123456");
        //4.准备sql语句
        String sql ="insert into student (name) values ('高圆圆')";
        //5.通过数据库连接对象获取数据库执行对象
        Statement statement=connection.createStatement();
        //6.执行sql语句
        int count=statement.executeUpdate(sql);
        System.out.println("影响了"+count+"行");
        //7.释放资源
        statement.close();
        connection.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值