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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马11期 于 2018-12-10 14:45 编辑

                           数据库知识汇总
一,数据库的基本概念 :

1, 数据库的英文单词 : DataBase 简称 : DB

2,  什么是数据库 :
      1) 用于存储和管理数据的仓库

3, 数据库的特点 (存储数据,按照一定的规则来做):
      1)数据库内容存储到硬盘中,[一直存在]
      2)对数据进行增删改查
      3)MYSOL(数据库软件)
              1)很多数据库 --很多表(TABLE) --很多列(COLUMN) --具体数据
2)列:横着的数据代表一条完整的数据, 竖着的数据代表具体的值
      4)DBMS(数据管理系统)
              很多数据库--很多列--具体数据
      5)持久化存储数据的,其实就是数据库就是一个文件系统
      6)方便存储和管理数据(和TXT文本的区别)
      7)使用了统一的方式从操作数据库 --SQL

  4, 常见的数据库软件 :(数据库只是一个基本概念,软件是对数据库的具体实现)

  5, 常用数据库 :Mysql ,oracle ,DB2


二,MySQL数据库软件


    1,安装 :参照视频
    2,卸载 : 1 ,去mysql的安装目录找到my.ini文件
               0,卸载mysql
                3 ,删除c:/ProgramData目录
    3,Mysql配置 :
        1,手动
        2,cmd-->services.msc    打开服务窗口
        3,cmd使用管理员打开mysql:
                *net start mysql :启动mysql服务
                *net stop mysql :关闭mysql服务
       4,查看状态 :
                          1) Win+R  : services.msc
                          2) netstat -ano | findStr "3306" 如果开启就会连接成功,如果关闭  就会等待
        5,关闭mysql :
                          1) 以管理员身份运行cmd命令行,然后输入 taskkill/F/PID 6976
                               (强制关闭)
                          2) *net stop mysql :关闭mysql服务
                          3) exit  (正常关闭)
                          4) quit (正常关闭)     
         6,登录 范式 :设计数据库表的结构,为了让表的设计更合理
    *概念 : 设计数据库时,需要遵循的一些规范,必须遵循前面所有范式规则
    *分类 :第一范式(1NF) :每一列都是不可分割的原子数据项,
              第二范式(2NF) :在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上取消非主属性对主码的部分函数依赖)
              第三范式(3NF) :在3NF的基础上,非码属性必须完全依赖于候选码

一,第一范式 :
    1)存在的问题  :
        *存在非常严重的数据冗余(重复)
        *数据添加存在问题 : 数据不合法
        *删除数据存在问题
二,第二范式 :
    1)概念 :
        *函数依赖 : A-->B,如果通过A属性(属性组)的值,可以确定唯一B的属性的值,则称B依赖于A
            *例如 : 学号 -->姓名 (学号,课程名称) -- > 分数

        *完全函数依赖 :A-->B ,如果A是一个属性组 ,则 B属性值得确定需要依赖于A属性组所有的属性值
            *例如 :(学号,课程名称)  -->分数

         *部分函数依赖 :A-->B , 如果A是一个属性组 ,则B属性值得确定只需要依赖于A属性组中某一些值即可
            *例如 :(学号,课程名称) -- >姓名

        *传递函数依赖 : A-->B,B-->C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A
            *例如 : 学生-->系名,系名-->系主任

        *码 : 如果在一张表中,一个属性或者属性组,被其他所有属性锁完全依赖,则称这个属 性(属性组)为该表的码
            *例如 :该表中码为 : (学号,课程名称)
           *主属性 : 码属性组中的所有属性
           *非主属性 : 除过码属性组的属性
    *存在问题 :
        * 数据添加存在问题
        *删除数据时存在问题
        *解决了冗余问题

三,第三范式 :(在2NF的基础上消除传递依赖)

语法 :
    *内连接
    *做外链接
    *右外链接

多表查询 :
    *语法单表查询一样,只是from后多加了几个表,但表和表之间都是有关系的
    *笛卡尔积 : (A集合,B集合的乘积)--取A集合和B集合所有的组合情况
    *多表查询的用途 : 消除无用的数据(消除无用的笛卡尔积)
    *多表查询的分类 :
            *内连接查询
            *隐式内连接
            *显式内连接
            *外链接查询
            *子查询

一,内连接 :
   *隐式内连接 :使用where条件来消除无用的数据
        *例如 :
            查询所有员工信息和对应的部门信息
            select * from empt , dept where empt.'dept_id; - dept.'id'
            *引号可写可不写
            *如果后面还有条件,就在关联条件后用and连接
            *查询员工表的名称 ,性别 和部门名称            
             select
                t1.name,
                t1.gender,
                t2.name,
             from
                empt t1,
                dept t2
             where
                 t1.'dept_id = t2.'id' ;
  *显示内连接 :
        *语法 : select 字段列表 from 表名1 /inner/ join 表名2 on 条件
            *inner :可以省略不写
        *例如 : select * from emp join dept on emp . dept_id = dept.id
        *如果还有其他普通条件,在关联条件后加where 条件

二,外链接
    *左外链接:select * from emp lift  [outer] join dept on emp . dept_id = dept.id
        *左外链接查询的是左表所有数据以及其交集
    *右外链接:select * from emp right [outer] join dept on emp . dept_id = dept.id
        *右外链接查询的是右表所有数据以及交集
和内连接的区别 : 内连接取的是两个表中共有的数据<------>外链接以其中的一张表为主,代表其中一张表多出来的部分和与另外表交集的部分

三,子查询 :查询中嵌套查询,称嵌套的查询为子查询
    例如 : 查询工资最高的员工信息
        *1,查询最高的工资是多少
            select max(salary) from emp;

        *2,查询员工信息,并且等于最高的
            select * from emp where emp.salary = 9000 ;
          使用子查询 : 一条sql语句完成这个操作
          *select * from emp where  emp.salary = (select max(salary)  from emp) ;

子查询不同情况 :
    *1,子查询的结果是单行单列的 :
        * 子查询可以作为条件,使用运算符去判断
        *使用的运算符  :  > , < , >= ,<= ,<>

    *2,子查询的结果是多行单列的 :
        *子查询可以作为条件 ,可以使用运算度in来判断

    *3,子查询的结果是多行多列的 :
        *如果是多行多列的,那么子查询作为一张虚拟表
        *条件 : 一定要保证子查询多行多列的虚拟表必须要提供关联条件


事物的四大特性 :
    *原子
    *一致
    *隔离
    *持久
四大隔离级别 :
    read uncommitted(效率是最高的,但是问题也是最大的)
        *脏读,不可重复读,虚读,幻读
    read committed(oracle)
        *不可重复读,虚读,幻读
    repeatable read(musql)
        *虚读,幻读
    serializable
        *没有问题,但是效率太低
事物的特点 :
    *开启事物
    *提交事物(把数据更新到数据库中)/回滚事物(将事物过程中所有改变的数据进行还原)

事物的基本介绍:
    *1,概念 :
        *如果一个包含多个步骤的业务操作,被事物管理那么这些操作要么同时成功,要么同时失败
        *例如 :张三给李四转五百元
        *分析 :
            1,查询张三账户余额是否大于五百
            2,张三账户 金额  -500
            3,李四账户 金额 +500
           --如果没有被事物管理,就有可能到某个步骤出现异常,那么就不会执行下步操作

           --如果被事物管理,要么同时成功要么同时失败,如果出现异常就会回滚
        *步骤 :
            *开启事务 :start transaction
            *回滚 : rollback
            *提交事物 : commit

提交方式(手动/自动) : 事物一般会关闭自动提交
    *MySQL数据库中事物默认自动提交
        *一条DML(增删改)事物默认自动提交
    *手动提交需要开启事物在提交
    *mysql就是自动提交--一条DML语句会自动提交一次事物
    *查看提交方式 -- 查看事物的默认提交方式 : @@autommit ,如果是等1代表自动,0代表手动
    *修改提交方式 -- set @@autommit = 0 ; 修改成手动提交
    *Oracle 数据库默认是手动提交事物的

事物的四大特征
   *原子性 : 不可分割的最小操作单位,要么同时成功,要么同时失败
    *持久性 : 当事物提交或者回滚后,数据库会持久化的保存数据
    *隔离型 : 多个事物之间,相互独立,
    *一致性 : 事物操作前后,数据总量不变
事物的隔离级别 :
    *概念 : 多个事物之间隔离的,相互独立的,但是如果多个事物,操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
    *存在的问题 :
        *1,脏读 : 一个事物读取到另一个事物中没有提交的数据被称为脏读
        *2,不可重复读 : 在同一个事物中两次读取到的数据不一样,
        *3,幻读 : 一个事物操作(DML)数据表中所有的记录,另一个事物添加了一条数据,则第一个事物查询不到自己的修改.

*隔离级别 :
    *read uncommitted :读未提交
        *产生的问题 : 脏读 ,不可重复读 ,幻读 ,虚读
    *read committed :读以提交
        *产生的问题 : 不可重复读 ,幻读
    *repeatable read  : 可重复复
        *产生的问题 :幻读
    *serializable :串行化
        *可以解决所有的问题,但是效率低
    *注意 :隔离级别从小到大,安全性越来越高,但是效率越来越低

DCL ,是由DBA(数据库管理员)

JDBC: 定义了所有关系型数据库的规则(接口)
   1)概念 " Java Database Connectivity" Java 数据库连接,Java语言操作数据库
    *本质 : 其实就是官方(SUN公司)定义了一套操作所有关系型数据库的规则.即接口.各个数据库厂商去实现这套接口,提供数据库驱动jar包.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动,jar包中的实现类(驱动)-->面向接口编程(多态)
  2)快速入门 :
        *步骤 :
            *1,导入1驱动jar包
                *复制mysql-connector
            *2,注册驱动 --> DriverManager
            *3,获取数据库连接对象 :Connection
            *4,定义sql语句并创建执行sql的对象
            *5,获取执行sql语句的对象 Statement  <-->PrepareStatement
            *6,便利结果,对结果进行操作
            *7,释放资源
    *导入三方jar包
        *在module下创建libs目录
        *拷贝jar包到该目录
        *右键 jar Add As Libirary

二,各个对象-->Class.forName("com.mysql.jdbc.Driver") 更简洁,只注册一次  *DriverManager :qu驱动管理对象
   *1,功能

0 个回复

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