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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白小托 中级黑马   /  2019-8-20 14:32  /  1328 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

-----------------------------多表查询------------------------------------------------------
INSERT INTO dept (id,dname) VALUES (50,'人事部');
SELECT
        *
FROM
        emp t1
RIGHT  JOIN
        dept t2
ON
        t1.`dept_id` = t2.`id`;
-------------------------------------- 子查询--------------------------------------------
/*概念:1.一个查询的结果作为另一个人查询的条件
        2.有查询的嵌套,内部的查询称为子查询
        3.子查询要使用括号
*/
-- 子查询的结果是单列查询
-- select 查询字段 from 表 where 字段=(子查询)
-- 查询工资最高的员工
SELECT MAX(salary) FROM emp; -- 在emp表中找到最高的工资
SELECT * FROM emp WHERE emp.`salary`=(SELECT MAX(salary) FROM emp);
-- 子查询的结果是多行单列的时候
-- select 查询字段 from 表 where 字段 in (子查询)
-- 查询工资大于5000的员工,来自哪些部门
SELECT dept_id FROM emp WHERE salary > 5000
SELECT
        emp.`ename`,emp.`salary`,dept.`dname`
FROM
        dept,
        emp
WHERE
        emp.`dept_id`=dept.`id` AND
        dept.`id`IN (SELECT emp.`dept_id` FROM emp WHERE salary > 5000);
       
SELECT dept.`dname` FROM dept WHERE id IN (SELECT dept_id FROM emp WHERE salary > 5000);
-- 子查询的结果是多行多列
-- 子查询的结果是多行多列,肯定在from后面作为表
-- select 查询字段 from (子查询) 表别名 where 条件;
-- 子查询你作为表需要取别名,否则这张表没有名称无法访问表中的字段
-- 查询出2011年以后入职的员工信息,包括部门名称
SELECT * FROM emp WHERE joindate >'2002-1-1';
SELECT
        *
FROM
        (SELECT * FROM emp WHERE joindate >'2002-1-1') t1,
        dept t2
WHERE
        t2.`id` = t1.dept_id;
----------------------------------------------事务--------------------------------------------------
事务的基本介绍
1.概念:如果包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
2.操作:
        开启事务:start transaction
        回滚:rollback
        提交:commit

CREATE TABLE account(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10),
        balance DOUBLE
);
INSERT INTO account (NAME,balance) VALUES ('张三',1000),('李四',1000);
UPDATE account SET balance=1000 WHERE NAME IN('张三','李四');
START TRANSACTION; -- 开启事务功能
UPDATE account SET balance=balance-500 WHERE NAME='张三';
123
UPDATE account SET balance=balance+500 WHERE NAME='李四';
COMMIT;   -- 提交事务
ROLLBACK; -- 回滚事务
SELECT * FROM account;
-- ----事务提交的两种方式-----------------------
SELECT @@autocommit;
SET @@autocommit=0;       
SET @@autocommit=1;
MySQL数据库中事务默认自动提交
        事务提交的两种方法:
                *自动提交:
                        *mysql就是自动提交的
                        *一条MDL(增删改)语句会自动提交一次事务
                *手动提交:
                        *Oracle数据库默认是手动提交
                        *需要先开启事务,再提交
                *修改事务的默认提交方式
                        *查看事务的默认提交方式:select @@autocommit;--1代表自动提交  0代表手动提交
                        *修改默认提交方式:set @@autocommit=0;
3.事务的四大特征(****面试题****):
        1.原子性:是不可分割的最小单位,要么同时成功,要么同时失败。
        2.持久性:当事务提交或回滚后,数据库会持久化的保持数据。
        3.隔离性:多个事务之间相互独立。
        4.一致性:事务操作前后,数据总量不变。
事务的隔离级别(暂无笔记)
-------------------------------------------------------------------------------------------
--------------------------------------JDBC------------------------------------------------
1.概念:Java DataBase Connectivity   Java数据库连接,Java语言操作数据库
JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据驱动jar包(它把所有的数据库实后写了一个类,然后把这些类写入一个jar包),我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

2.快速入门:
步骤:
        //1.导入驱动包jar包
        //2.注册驱动(让程序知道用的是哪个版本,让他知道哪个驱动包需要注册驱动 )
        *Class.ForName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象 Connection(本地的Java代码和数据库之间的桥梁对象)
         * Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db6","root","root");
        //4.定义sql语句(将来通过一些方式把sql语句发给数据库,让数据执行sql语句,从而达到Java代码操作数据库的作用 )
        *String sql = "update account set balance = 1001 where id = 3";
        //5.获取执行sql语句的对象Statement(因为connection不能直接执行)
        *Statement stmt = conn.createStatement();
        //6.执行sql,接受返回结果(方法调用的返回值)
        *int i = stmt.executeUpdate(sql);
        //7.处理结果
        *System.out.println(i);
        //8.释放资源        (避免内存泄漏)
        *stmt.close();
                *conn.close();
3.详解各个对象       
        1.DriverManager:驱动管理对象
        2.Connection:数据库连接对象
        3.Statement:执行sql的对象
        4.ResultSet:结果集对象
        5.PreparedStatement:执行sql的对象
       
DriverManager功能:
        1)注册驱动:告诉程序该使用哪一个数据驱动jar
                static voidregisterDriver(Driver driver):注册与给定的驱动程序DriverManager。
                写代码使用:Class.ForName("com.mysql.jdbc.Driver");
        2)获取数据库连接
connection:url:连接路径   user:用户名   password:密码
Statement:
        Statement接口中的方法
                in executeUpdate(String sql):用于DML增删改操作insert,update,delete。返回值:返回数据库影响的行数
                ResultSet executeQuery(String sql):用于发送SQL语句,执行查询的操作 select。返回值:查询的结果集
---------------------------------------------------------------------------------------------
----------------------------数据库连接池---------------------------------------------------
#数据库连接池
#spring JDBC:JDBC Template
#数据库连接池
        *概念:其实就是一个容器(集合),存放数据库连接的容器
        当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库的时候,从容其中获取连接对象,用户访问完之后,会将连接对象归还给容器。
        *好处:
            1.节约系统资源
            2.用户访问高效
        *实现:
            *接口标准:DataSource      javax.sql包下的(这个接口代表了连接池)
                方法:
                        *获取连接 Connection getConnection( ) (该方法返回数据库连接对象 ,尝试建立与DataSource对象所代表的数据源的连接)
                        *归还连接 Connection.close( )如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接,而是归还连接。
            *由数据库厂商实现接口。
                C3P0:数据库连接池技术
                Druid:数据库连接池实现技术,由阿里巴巴提供
C3P0:数据库连接池技术
        *步骤:
               // 1.导入jar包(两个)c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar
               // 2.定义配置文件:
                *名称:c3p0.properties或者c3p0-config.xml
                *路径:直接将文件放在src目录下即可
               // 3.创建核心对象  数据池连接对象 ComboPooledDataSource
                *DataSource da = new ComboPooledDataSource();
               // 4.获取连接:getConnection
                *for(int i=1 ; i<=10 ; i++){
                        Connection conn = ds.getConnection();
                        System.out.println(i+":"+conn);
                }
              //归还连接到连接池中
                *if(i == 5){
                        conn.close;
                }
Druid:数据库连接池实现技术,由阿里巴巴提供的
        *步骤:
              1.导入jar包 druid-1.0.9.jar
              //2.定义配置文件:
                *是properties形式的
                *可以叫任意名称,可以放在任意目录下
              //3.加载配置文件。Propertise()
                Properties pro = new Propertise( )
                InputStream is = DruidDemo.class.getClassLoader( ).getResourceAsStream("druid.properties")
                //当前类的名称获取字节码文件:DruidDemo.class.getClassLoader( )
                //获取字节输入流DruidDemo.ClassLoader( ).getResourceAsStream(/*name*/);
                // getResource(String name)返回值为InputStream
                //pro.load( );(需要一个字流或字符流)
                pro.load(is);
              //4.获取数据库连接池对象:通过工厂来获取  DruidDataSourceFactory
                //DruidDataSourceFactory.createDataSource(参数需要propertise对象)
                DateSource ds = DruidDataSourceFactory.createDataSource(pro);
              //5.获取连接:getConnection
                Connection conn = ds.getConnection( );
                System.out.println(conn);
        *定义工具类:
              1.定义一个类 JDBCUtils
              2.提供静态代码块加配置文件,初始化连接池对象。
              3. 提供方法
                1.获取连接方法:通过数据库连接池获取连接
                2.释放资源
                3.获取连接池的方法(有的工具类或有的小框架只需要一个连接池,不需要连接对象,他会自己调用连接池的获取连接方法)

0 个回复

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