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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 13333114253 中级黑马   /  2018-12-10 20:40  /  1229 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[石家庄校区]MYSQL基础1
[石家庄校区]MYSQL基础2
[石家庄校区]MySQL多表&事务课堂笔记
[石家庄校区]JDBC
[石家庄校区]数据库连接池,spring
数据库基本概念
    数据库分类
        关系型
            mysql
            oracle
            db2
        非关系型
            redis
    mysql 6.0收费
   
    DBMS 数据库管理系统   
    数据库结构
        数据库
            -->表(列)
                    -->数据                  
    sql分类
        DDL(数据库和表的操作)
        DML(数据的增删改)
        DQL(数据的查询)
        DCL(DBA 授权)

        
    数据类型
        VARCHAR(长度)
        CHAR(长度)
        TEXT
        DATE
        DATETIME
        TIMESTAMP    默认当前系统时间         
    约束    
        主键    PERMARY KEY AUTO_INCREMENT
            主键的删除     ALTER TABLE 表名 DROP PRIMARY KEY
        外键    FOREIGN KEY  (创建完表后创建外键,谁有外键谁就是从表)
            外键的添加      CONSTRAINT 外键 FOREIRN KEY (外键名) REFERENCES 主表 (主表列)
            外键的删除       ALTER TABLE 表名 DROP  FOREIRN KEY 外键名
        非空    NOT NULL
        唯一    UNIQUE        --不能重复,可以为空,只能能有一列        
            唯一删除     ALTER TABLE 表名 DROP INDEX  列名;

    多表的关系
        1对1        
        1对多
            多创建外键指向一主键
        多对多
            中间表2列作为(外键/联合主键)分别指向其他2个主表的主键                  
MYSQL
    安装卸载
    net start mysql
    net stop mysql
   
    netstat -ano | findStr "3306"
    taskkill /F /PID mysql的进程id

    sqlyog工具使用
    --------------------------------------------
    DDL(CRUD)
       数据库
            CREATE DATABASE 数据库名 CHARACTER SET utf8  
            DROP DATABASE 数据库名
            SHOW DATABASES
            SHOW CREATE DATABASE 数据库名
            SELECT DATABASE()
            USE 数据库名
        
            CREATE TABLE 表名(列名 数据类型 约束,列名 数据类型 约束);
            DROP TABLE 表名
            SHOW CREATE TABLE 表名
            SHOW TABLES
            DESC 表名
            ALTER TABLE 表名 ADD 列名 数据类型 约束
            ALTER TABLE 表名 DROP 列名
            ALTER TABLE 表名 MODIFY 列名 数据类型 约束
            ALTER TABLE 表名 CHANGE 列名 新列名 数据类型 约束
            ALTER TABLE 表名 CHARACTER SET utf8
            RENAME TABLE 表名 TO 新表名
            TRUNCATE TABLE 表名
    DML
        INSERT INTO 表名(列名...) VALUES(值...)
        DELETE FROM 表名 WHERE 条件
        UPDATE 表名 SET 列名 = 值 WHERE 条件
    DQL
        单表
            SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 条件 ORDER BY 列名 ASC/DESC LIMIT 索引,多少条 --
       多表(笛卡尔积)
            内连接
                隐式

                SELECT 列名 FROM 表名1,表名2 WHERE 关联条件 AND 条件
                显式
                SELECT 列名 FROM 表名1 JOIN 表名2 ON 关联条件 WHERE 条件
            外链接
                左外连接(满足左表的条件数据以及交集部分)

                SELECT 列名 FROM 表名1 LEFT JOIN 表名2 ON 关联条件 WHERE 条件
                右外连接(满足右表的条件数据以及交集部分)
                SELECT 列名 FROM 表名1 RIGHT JOIN 表名2 ON 关联条件 WHERE 条件
            子查询
                查询嵌套查询
                    条件:        单行单列,多行单列
                    虚拟表:        多行多列
    聚合函数
    MIX   --最小值
    MIN   --最大值
    SUM   --和
    AVG   --平均
    COUNT --个数
    事务
        START TRANSACTION;  --开启事务
        COMMIT;   --提交事务,1自动(MYSQL) 0手动(ORACLE)
        ROLLBACK;  --回滚事务
        四大特性
            原子
            持久
            一致
            隔离

        
        隔离级别(脏读,不可重复读,虚读,幻读)级别越高解决问题的能力越高
            默认隔离界别
                MYSQL --> 3
                ORACLE --> 2
        read  uncommitted
        read  committed
        repeatable read
        serializable

   
jdbc
    概念
        一套接口(java提供的规范)    -->        要求厂商自己实现操作各自数据库的 驱动
        面向接口编程
    1.注册驱动
    2.获取连接
    3.创建sql和执行sql的对象
    4.执行sql获取结果
    5.处理结果
    6.释放资源

   
[Java] 纯文本查看 复制代码
 Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/数据库", "用户名", "密码");
        PreparedStatement state = con.prepareStatement("sql语句");
        state.setXxx(占位符  ,  付得值);
        ResultSet rs = state.executeQuery();/或者 int i = state.executeUpdate();--执行几行数据
        while (rs.next()) {
           rs.getXxx();
        }
    state.close();
    con.close();
    rs.close();

    ps:
        1.ResultSet的遍历
            while(rs.next()){
                rs.getObejct(1);
                rs.getObejct("列名")
            }
        2.sql注入
            使用    PrepareStatement    配合占位符  ?
            pst.executeQuery()    --> 没有参数
            pst.executeUpdate() --> 没有参数
        3.事务
            conn.setAutoCommit(false);
            conn.commit()
            conn.rollback();
        
        
连接池
   1. C3P0
        接入步骤:
            1.导jar
                1.c3p0  2个
                2.mysql驱动
            2.导入配置文件(src目录下)
                c3p0-config.xml
            3.使用
                DataSource dataSource = new ComboPooledDataSource();
                Connection con = dataSource.getConnection();

        
    2.DRUID(德鲁伊)
        接入步骤
                1.导jar
                    1.druid
                    2.mysql驱动
                2.导入配置文件(src)
                    druid.properties
                3.使用
                    Properties pro = new Properties();
                    pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"))
                    DataSource dataSource = DruidDataSourceFactory.createDataSoure(pro)
                    Connection con = dataSource.getConnection();

                                    
   JdbcUtils实现思路
        1.获取数据源(连接池)    DataSource
        2.获取连接对象             Connection
        3.释放资源                重载
        package cn.itcast.utils;     
        思路:
            1,2:
                DataSource在类加载的时候就应该初始化,为了保证对象能够及时创建,在 static{} 静态代码块中创建的对象
                    Properties pro = new Properties();
                    pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"))
                    dataSource = DruidDataSourceFactory.createDataSoure(pro)
               
                提供返回数据源的方法 getDataSource()   ---> return dataSource
                提供返回连接         getConnection()   ---> return dataSource.getConnection()
               
            3:
                在关闭之前做非空判断!!!
[Java] 纯文本查看 复制代码
/**
 * Druid连接池的工具类
 */
public class JDBCUtils {

    //1.定义成员变量 DataSource
    private static DataSource ds ;

    static{
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 释放资源
     */
    public static void close(Statement stmt,Connection conn){
       /* if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/

       close(null,stmt,conn);
    }


    public static void close(ResultSet rs , Statement stmt, Connection conn){


        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取连接池方法
     */

    public static DataSource getDataSource(){
        return  ds;
    }

}


JdbcTemplate
    SPRING    (基于jdbc来简化数据库的操作)
   
    !!!如果有占位符需要传入参数  
   DataSource dataSource = new ComboPooledDataSource();
    JdbcTemplate template = new JdbcTemplate(dataSource);

        
    增删改
        template.update("sql",[具体参数]);
        
    查询
        单条结果

            Map<String,Object> map = template.queryForMap("sql",[具体参数]);
            Bean bean = template.queryForObject("sql",new BeanPropertyRowMapper<Bean>(Bean.class),[具体参数]);
        多条结果
            List<Map<String,Object>> list = template.queryForList("sql",[具体参数]);
            List<Bean> list = template.query("sql",new BeanPropertyRowMapper<Bean>(Bean.class),[具体参数]);
        


更多图片 小图 大图
组图打开中,请稍候......

MYSQL-重置密码&amp;备份还原数据库.txt

937 Bytes, 下载次数: 78

sql多表 .txt

1.58 KB, 下载次数: 68

SQL语句分析 .txt

3.81 KB, 下载次数: 77

sql語句 .txt

5.02 KB, 下载次数: 78

1 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2018-12-11 18:42:19
沙发
到此一观
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马