黑马程序员技术交流社区

标题: 数据库总结 [打印本页]

作者: 木木鱼    时间: 2018-12-10 13:18
标题: 数据库总结

数据库基本概念
        数据库分类
                关系型
                        mysql
                        oracle
                        db2
                非关系型
                        redis
         数据库的特点:
         持久化存储数据的。其实数据库就是一个文件系统
         方便存储和管理数据
         使用了统一的方式操作数据库

SQL分类
         DDL(Data Definition Language)数据定义语言
                用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
         DML(Data Manipulation Language)数据操作语言
                用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
        DQL(Data Query Language)数据查询语言
                用来查询数据库中表的记录(数据)。关键字:select, where 等
        DCL(Data Control Language)数据控制语言(了解)
                用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

        
        DBMS 数据库管理系统
        
        数据库结构
                数据库
                        -->表(列)
                                        -->数据
                                       
        sql分类
                DDL(数据库和表的操作)

                DML(数据的增删改)
                DQL(数据的查询)
                               排序查询
        *               语法:order by 子句
                * order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...

        * 排序方式:
                * ASC:升序,默认的。
                * DESC:降序。

                 聚合函数:将一列数据作为一个整体,进行纵向的计算。
        1. count:计算个数
                1. 一般选择非空的列:主键
                2. count(*)
        2. max:计算最大值
        3. min:计算最小值
        4. sum:计算和
        5. avg:计算平均值

                DCL(DBA)
               
        数据类型
                VARCHAR(长度)
                CHAR(长度)
                TEXT
                DATE
                DATETIME
                TIMESTAMP        默认当前系统时间
               
               
        约束        
                主键        AUTO_INCREMENT
                外键
                非空
                唯一
        多表的关系
                1对1
                        
                1对多
                        多创建外键指向一主键
                多对多
                        中间表2列作为(外键/联合主键)分别指向其他2个主表的主键
        数据库设计的范式
        * 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
        分类:
                 第一范式(1NF):每一列都是不可分割的原子数据项
                 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)                                
MYSQL
        安装卸载
        net start mysql
        net stop mysql
        
        netstat -ano | findStr "3306"
        taskkill /F /PID mysql的进程id

        sqlyog工具使用
        --------------------------------------------
        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 索引,多少条 --
                多表
                        内连接
                                隐式
                                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 条件
                        子查询
                                查询嵌套查询
                                        条件:                单行单列,多行单列
                                        虚拟表                多行多列
        
        事务
                          概念:
                *  如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
               
                START TRANSACTION;
                COMMIT;
                ROLLBACK;
        
                四大特性
                        原子
                        持久
                        一致
                        隔离
               
                隔离级别(脏读,不可重复读,虚读,幻读)
                        默认隔离界别
                                MYSQL --> 3
                                ORACLE --> 2
               
        
jdbc

        概念
                一套接口(java提供的规范)要求厂商自己实现操作各自数据库的 驱动
                面向接口编程

        1.注册驱动
        2.获取连接
        3.创建sql和执行sql的对象
        4.执行sql获取结果
        5.处理结果
        6.释放资源
        
        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();
               
               
连接池
        C3P0
                接入步骤:
                        1.导jar
                                1.c3p0  2个
                                2.mysql驱动
                        2.导入配置文件(src目录下)
                                c3p0-config.xml
                        3.使用
                                DataSource dataSource = new ComboPooledDataSource();
                                Connection con = dataSource.getConnection();
               
        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.释放资源                                重载


                思路:
                        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:
                                在关闭之前做非空判断!!!


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),[具体参数]);
               






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2