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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-12-13 09:45 编辑

数据库总结
数据库:(datebase)用于存储和管理数据的仓库
特点:1.持久化存储数据  2 .方便存储和管理数据  3.使用统一的方式操作数据库
分类:   关系型     mysql  oracle  db2
       非关系型    redis
MYSQL服务启动: 使用管理员打开cmd
                          * net start mysql : 启动mysql的服务
                          * net stop mysql:关闭mysql服务      *exit退出
[size=18.6667px]SQL分类:
[size=18.6667px]              DDL(数据库和表的操作)
              DML(数据的增删改)
              DQL(数据的查询)
              DCL(DBA)
数据类型
         日期
             date
             datetime
             timestamp
             区别:timestamp有默认值,默认为系统当前时间
         字符串
             char
             varchar
             text   超大文本/文本文件的保存
char和varchar区别   (面试题)
             存入的长度不能超出指定长度
             varchar长度是在不超范围的情况下可以根据文本内容改变,
             char会把长度固定,同时不足的部分用空格补全
DDL:
        数据库
            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 索引,多少条 --
     *面试:where 和having 的区别:
            1.where 在分组之前进行筛选,不能使用聚合函数
            2.having 在分组之后的结果进行2次筛选
    1.去除重复
       *select distinct 列名
    2.聚合函数:   将一列数据作为一个整体,进行纵向的计算
       聚合函数通常都是配合分组进行操作,通常排除null值
       1.count : 计算个数
       2. max : 计算最大值
       3. min : 计算最小值
       4. sum : 计算和
       5. avg : 计算平均值
       聚合函数的计算,通常排除null值
     3.语法 limit 开始的索引,每页查询的条数
        公式: 开始的索引 = (当前的页码 -1) * 每页显示的条数
      
多表
            内连接
                隐式
                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 条件
            子查询
                查询嵌套查询
                    条件:        单行单列,多行单列
                    虚拟表        多行多列

约束
          1.主键约束:primary key  auto increment(自动增长)
          2.非空约束:not null
          3.唯一约束:unique
          4.外键约束:foreign key
   1. 删除唯一约束: ALTER TABLE 表名 DEOP INDEX 列名;
    主键约束:
           1.含义:非空且唯一
           2.一张表只能有一个字段为主键
           3.主键是表中记录的唯一标识
  2.创建表之后,添加外键
           ALTER TABLE 从表 ADD FOREIGN KEY (外键列) REFERENCES 主表名称(主表列名称);
   3.级联   cascade
   4.多表之间的关系
         1.一对一
         其中一方创建外键列(要唯一)指向另一方主键列
         2.一对多(多对一)
         实现方式:在多得一方建立外键列指向一的一方主键列
         3.多对多        
         创建一个中间表(指向2个主表的主键)
事务
开启事务:START TRANSACTION;
        提交事务:COMMIT;
        回滚:ROLLBACK;
    四大特性:
              原子性:不可分割的最小操作单位,要么同时成功,要么同时失败
              一致性:事务操作前后,数据总量不变
              隔离性:多个事务之间. 相互独立
              持久性:当事务提交或回滚后,数据库会持久化的保存数据
     四大隔离级别:
              read_uncommitted:  脏读,不可重复读,虚读,幻读(效率高,非常不安全)
              read_committed(oracle):  不可重复读,虚读,幻读
              reapeatable read(mysql):  虚读,幻读
              serializable
      注意:隔离级别从小到大安全性越来越高,但是效率越来越低              
    隔离级别(脏读,不可重复读,虚读,幻读)
            默认隔离界别
                MYSQL --> 3
                ORACLE --> 2

JDBC
    概念:一套接口(java提供的规范),要求厂商自己实现操作各自数据库的驱动
步骤:    1.注册驱动
         
[Java] 纯文本查看 复制代码
     Class.forName("com.mysql.jdbc.Driver")

            2.获取数据库连接对象  Connection
      
[Java] 纯文本查看 复制代码
     Connection conn = DriverManager.getConnection(jdbc:mysql://ip地址:端口号/数据库名称,数据库账号,密码)

            3.定义sql语句并且创建执行sql的对象
      
[Java] 纯文本查看 复制代码
      prepareStatement(sql语句)

            4.执行sql获取结果
            dml(增删改)
            
[Java] 纯文本查看 复制代码
    stmt.executeUpdate()

            dql(查询)
                stmt.executeQuery()
            5.遍历结果,对结果进行操作
            6.释放资源
注意:   
        1.ResultSet的遍历
         
[Java] 纯文本查看 复制代码
   while(rs.next()){
                rs.getObejct(1);
                rs.getObejct("列名")
            }

        2.sql注入
            使用    PrepareStatement    配合占位符  ?
            pst.executeQuery()    --> 没有参数
            pst.executeUpdate() --> 没有参数
        3.事务
            conn.setAutoCommit(false);
            conn.commit()
            conn.rollback();
连接池
        C3P0
        接入步骤:
            1.导jar
                1.c3p0  2个
                2.mysql驱动
            2.导入配置文件(src目录下)
                c3p0-config.xml
            3.使用
              
[Java] 纯文本查看 复制代码
  DataSource dataSource = new ComboPooledDataSource();
                Connection con = dataSource.getConnection();

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

JDBCUtils
配置文件
               jdbc.properties
                url=
                user=
                password=
思路:
            1,2:
                DataSource在类加载的时候就应该初始化,为了保证对象能够及时创建,在 static{} 静态代码块中创建的对象
                 
[Java] 纯文本查看 复制代码
   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] 纯文本查看 复制代码
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);
            }



         
[Java] 纯文本查看 复制代码
  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;
            }

        }

SpringJDBC
!!!如果有占位符需要传入参数
[Java] 纯文本查看 复制代码
   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),[具体参数]);


0 个回复

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