A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

mysql多表&JDBC笔记整理

mysql多表


单表的约束
    主键约束: primary key 唯一非空,
    唯一约束:unique
    非空约束:not null
多表的约束
    外键约束:用来保证数据的完整性
    添加外键约束语句:alter table employee add fireign key(外键列名) references(列名)
表与表之间的关系:
    一对多:用多的一方的外键指向一的一方的主键
    多对多:需要创建中间表,中间表至少有两个字段,这两个字段分别作为外键,指向两个表的主键
    一对一:假设是一对多,在多的一方创建一个字段与一的一方建立关联
多表查询
    连接查询:
        交叉连接:查询到两个表的笛卡尔积
            select * from 表1 inner join表2;
            select * from 表1,表2 ;
        内连接:
            显示内连接:select * from 表1 inner join 表二 on 关联条件;
            隐式内连接:select * from 表1,表2 where 关联条件
        外连接:
            左外连接:select * from 表1 left outer join 表2 on 关联条件
            右外连接:select * from 表1 right outer join 表2 on 关联条件
外连接和内连接的区别:
    内连接查询出来的是公共的部分,
    左外连接是左表加上公共的部分,
    右外连接是右表加上公共的部分
子查询
    in:在条件范围内
    exists:if条件判断,子句为true,执行前边
    any:大于任意的就是大于最小值
    all:大于所有的就是大于最大值

事务

事务
    start taransaction:开始事务
    commit:提交事务
    rollback:回滚事务
事务的特性
    原子性:组成事务的各个逻辑单元不可分割
    一致性:事务执行前后数据一致
    隔离性:一个事务的执行,不应该收到其他事务的干扰
    持久性:事务一旦提交,数据就会被永久保存
事务的隔离级别
    脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
    不可重复读:一个事务独到了另一个事务已经提交的update的数据,导致多次查询结果不一致
    虚读/幻读:一个失误读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致
    read uncommiteed:脏读,不可重复读,虚读都有可能发生
    read committed:避免脏读,但是不可重复读和虚度都是有可能发生
    repeatable read:避免脏读和不可重复读,但是虚度有可能发生
    serializable:避免脏读,不可重复读,虚读。
对事务的隔离级别进行操作
    select @@tx_isolation:查看事务的隔离级别
    set session transaction lsolation level :设置隔离级别



JDBC


JDBC概述
    Java Data Base Connectivity.java 由sun公司提供的一套连接数据库的接口,规范。
    使用JDBC需要引入jar包


JDBC的使用
    @test 注解 双击方法名就可以执行,但是必须是public修饰的方法
    DriveManager:管理一组JDBC ,驱动程序的基本服务 使用这个对象注册驱动,获得与数据库的连接
    registerDriver:注册驱动
    static getConnection("数据库地址",数据库名称,数据库密码)获得链接
    jdbc:连接数据库的一个协议
    mysql:是jdbc的一个子协议
    loaclhost:连接的mysql数据库服务器的主机地址(连接本机可以写成localhost或者id地址),如果不是本机就要写上要连接的电脑的Ip地址
    3306:mysql服务器的端口号
    url连接的是本机的路径可以简化为///数据库名称

    创建sql语句对象:
        CreateStatement
    执行sql语句:
        Statement
        PrepareStatement:执行sql对sql进行预处理,解决sql注入的漏洞
    Statement
        作用1:执行sql语句
            exectute:执行查询,修改,添加,删除的sql语句返回一个boolean类型
            excuteQuery:执行查询,只能执行select语句,返回一个ResultSet结果集
            excuteUpdate:执行修改,添加,删除 返回的int代表影响的行数
        作用2:批处理
            addBatch:添加批处理
            clearBatch:清空批处理
            executeBatch:执行批处理
    ResultSet:
        通过执行sql查询语句产生的结果集(只有查询语句才会产生结果集)
    遍历结果集:
        .next()向下移动一个单位
    结果集的获取
        getXXX();
        getXXX(int columnIndex);列号
        getXXX(String columnName);列名 如果有别名则使用别名
        getObject():获取任意类型的值


JDBC资源释放
    connection对象尽量晚创建,尽早释放掉
    将资源释放的代码块写入到finally代码块中
    标准资源释放:
        if(rs != null){
        try{
            re.close();
        }catch(SQLEXception e){
            e.printStackTrace();
        }
   
        }
        rs = null;
        if(conn != null){
        try{
            conn.close();
        }catch(SQLEXception e){
            e.printStackTrace();
        }
   
        }
        conn = null;
        if(stmt != null){
        try{
            stmt.close();
        }catch(SQLEXception e){
            e.printStackTrace();
        }
   
        }
        stmt = null;


JDBC使用步骤
    注册驱动
    class.forName("com.mysql.jdbc.Driver);
    获得链接
    DriverManager.getConnection();
    //执行操作
    //创建SQL对象
    stmt= conn.createStatement();
    //编写SQL语句
    String sql = "insert into user values (null,'eee','123','a',28)";
    //执行sql语句
    stmt.execute();
    //释放资源



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马