• java基础9:数据库


    unit1 数据库

    1.MySQL:

    数据目录:数据库(文件夹)  表(文件)   数据()

    2.SQL概念:

    • Structured Query Language,结构化查询语言,关系型数据库
    • SQL语言,单行多行都行,分号结束“;”,语句不区分大小写,关键字建议大写
    • 单行注释:-- 注释内容     # 注释内容           
    • 多行注释:/* 注释内容 */

    3.SQL语句:

     

     DML:增改查

    create:create database 数据库  character  set   字符集;

    retrieve:show database;

    update:alter  database  数据库   character set 字符集;

    DDL:删用数据库

    delete:drop database  数据库;

    use:select 数据库;

    DDL:操作表

    create:create table 表名(列名和列的数据类型);

         数据类型:double(2,5) data(yyyy-MM-dd)      datatime(yyyy--MM--dd HH:mm:ss)

        复制表:create table 表名 like 被复制的表名;

    retrieve:show tables;    desc 表名;(查询表结构)

    update:修改表名: alter table 表名 rename to 新表名;

        修改字符集:alter table stu character set utf8;

        添加一列:alter table 表名 add 列名 数据类型;

        修改列名称:alter table 表名 change 列名 新列名 新列的数据类型;

    delete:drop table 表名;

    4.图形化界面工具SQLyog:Navicat。。。

    DML:增删改查数据

    除了数字类型,其余类型都要用引号引起来

    添加:insert into 表名(列名1,列名2) values (值1,值2);

    查询:select *from 表名;

    删除:delete from 表名 【where 条件】;不推荐使用

       truncate  table 表名;先删除表,再创建一张一样的

    修改:update 表名 set 列名1=值1 ,列名=值2 【where 条件】;

    DQL:查询表中记录

    • select 字段列表
    • from 表名列表
    • where 条件列表
    • group by 分组字段 
    • having 分组之后的条件   
    • order by 排序 
    •  limit 分页限定
    • distinct 去除重复数据

    基础查询:

    • ifnull(表达式1,表达式2):null,计算结果都为null
    • as用来起别名,也可以省略
    • 一般也可以用四则运算计算列中的值

    条件查询:where

    • 运算符:>  <  <=   >=   =   <>
    • between   and   
    • in 集合
    • like 模糊查询:  _单个任意字符     % 多个任意字符
    • ** is null   ,对的        ** = null,错误
    • and  &&     or  ||      not   !=

    排序查询:order by 排序字段1,排序方式1,   排序字段2,排序方式2

      排序方式:ASC,升序默认的       DESC,降序的     如果有多个排序条件,则当前面的条件值一样时候,才判断第二个条件

    聚合函数:将一列数据作为整体,做纵向的计算

       计算:count个数的     max最大值     min最小值      sum求和       avg平均值

      count(*)        MAX(math)        。。。都加上括号()

       ps:会自动排除null的数据,一般选择非空的列(主键)

    分组查询:group by 分组字段

      分组后查询的字段必须为分组字段或者是聚合函数   

      where和having的区别:where在分组之前限定,where后不可跟聚合函数判断       having先分组再限定,后可跟聚合函数判断

    分页查询:limit 开始的索引,每页查询的条数。公式:开始的索引=(当前页码-1)*每页显示的条数

      select *from stu limit 0,3;        limit是MYSQL 的方言

    5.约束:约束条件  

    • 主键约束:primary key
    • 非空约束:not null
    • 唯一约束:unique
    • 外键约束:foreign key
    • 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称)
    • 外键约束的级联操作:联动操作,删除一个,联动的都删除
    • 添加级联:alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称)on update cascade;
    • 删除级联:on delete cascade;
    • 自动增长:auto_increment

    多表关系:一对一,一对多(在多的地方建立外键,指向一的地方建立的主键),多对多(中间有一个中介连接,N:1:M)

    范式:不同的规范要求,被叫做范式,各种范式呈递次规范,先遵循前面再看后面的 ,越高范式数据冗余越小

      第一范式1NF     2NF      3NF        巴斯-科德范式BCNF       4NF      5NF,完美范式    

    •      函数依赖:A-->B       ID --》name
    •   完全函数依赖:A-->B     A是一个属性组     (ID,课程名称)-->分数
    •   部分函数依赖:A-->B     A算是部分的属性组       (ID,课程名称)-->name
    •   传递函数依赖:A-->B ,B-->C     ID-->name,name-->班主任
    •   码:一张表中,一个属性或者属性组,被其他所有属性完全依赖了,这个属性就是该表的码

    备份还原:

    • 备份:mysqldump -uroot -proot  数据库名 >  path     
    • 还原:登录,创建,使用,执行(source path)  

    6.多表查询:用来消除无用数据

    • 笛卡尔积: A,B,取这两个集合的所有组成情况
    • 内连接查询:表+条件+字段要求
    •   隐式连接:where  条件
    •   显式连接:from 表名  [ inner ]   join   表名   on   条件
    • 外连接查询:
    •   左外:from 表名 left  [ outer]   join   表名   on   条件,查询左表所有数据以及他们的交集部分
    •   右外:from 表名 right [ outer]   join   表名   on   条件,查询右表所有数据以及他们的交集部分
    • 子查询:查询中嵌套查询
    •   select * from A where A.'sex'=(select  'sex'='女'  from A);
    •   结果是单行单列:运算符=单值判断
    •   多行单列:范围                  in (3,2)  是3或者是2.
    •   多行多列:一张虚拟表

    7.事务:

    • 概念:如果包含一个多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
    • 操作:开启事务start transaction,有问题回滚rollback,没问题提交commit
    • 特征:原子性,持久性,隔离性,一致性
    •   
    • 隔离级别:原本相互独立,但是多个事务操作同一批数据的话,会引发问题。安全级别高,则效率低
    •   查询:select @@tx_isolation;
    •   设置:set global transation isolation level 级别字符串;
    •    
    • 在MySQL中,事务默认自动提交,Oracle中,事务默认手动提交;如果开启了事务并且没有提交事务,则事务会默认自动回滚
    •   查看事务提交方式:select @@autocommit  ;    0代表手动提交,1代表自动提交
    •      修改事务提交方式:set @@autocommit  = 1; 

    8.DCL:控制权限,管理。user表。%通配符可以表示在任意主机使用用户登录数据库

    DDL:操作数据库和表

    DML:增删改表中数据

    DQL:查询表中数据

    DCL:管理用户,授权------DBA(数据库管理员)

    管理用户:

    • 添加:create user '用户名'@'主机名' identified by ‘密码’;
    • 删除:drop user   '用户名'@'主机名' ;
    • 修改密码:update user set password = password(新) where user = '用户名';
    • root忘记密码:管理员需要运行cmd------net stop mysql -----mysqld-------skip-grant-tables----打开新的cmd,输入mysql,回车----use mysql----...

    授权:

    • 查询:show grants for '用户名'@'主机名' ;
    • 授权:grant 权限列表 on 数据库名.表名  to  '用户名'@'主机名' ;
    • 撤销:revoke 权限列表 on 数据库名.表名  from  '用户名'@'主机名' ;

    9.JDBC:java语言操作数据库,定义了一套操作所有关系型数据库的规则(接口)

     bin.jar : 存放驱动jar包,都是class文件

    1. 导入驱动jar包:复制jar包,粘贴在libs包下面,右键--Add as Library
    2. 注册驱动
    3. 获取数据库连接对象Connection
    4. 定义SQL语句
    5. 获取执行SQL语句的对象statement
    6. 执行SQL,接受返回结果
    7. 处理结果
    8. 释放资源
    //注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获取数据库连接对象
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db33"
    , "root", "root");
    //定义SQL语句
    String sql = "update account set balance = 500 where id = 1";
    //获取执行SQL的对象
    Statement statement = connection.createStatement();
    //执行SQL
    int count = statement.executeUpdate(sql);
    //处理结果
    System.out.println(count);
    //释放资源
    statement.close();
    connection.close();

    五个对象:
    DriverManager:驱动管理对象,注册驱动,告诉程序应该使用哪一个数据库驱动jar包
    Connection:数据库连接对象,获取执行SQL的对象,管理事务(开启,提交,回滚)
      开启:void setAutoCommit
      提交:commit()
      回滚:rollback()
    Statement:执行SQL对象
    ResultSet:结果集对象
    PreparedStatement:执行SQL对象

    JDBC工具类:Utils,配置文件解决问题

    -----------------------------------------------------------------------------------

    10.数据库连接池:
    一个容器集合,存放数据库连接的容器。
    系统初始化好之后,容器被创建,申请一些链接对象,当用户来访问数据库时候,从容器中获取链接对象,用户访问完之后,再将链接对象归还给容器。

    实现:标准接口(DataSource) 获取方法(getConnection())----> 再归还连接
    C3P0:数据库连接池技术
    Druid:数据库连接池实现技术,阿里巴巴提供

    C3P0
    • 导入两个jar包:add as library        还有驱动jar包
    • 定义配置文件:c3p0.properties 或者是 c3p0-config.xml 放在src目录下面
    • 创建核心对象:ComboPoolledDataSource
    • 获取连接:getConnection
    Driud
    • 导入jar包:add as library        还有驱动jar包
    • 定义配置文件:driud.properties  或者是 driud-config.xml    可以放在任意下面
    • 获取连接池对象:DriudDataSourceFactory
    • 获取连接:getConnection
    • 工具类:

    11.SpringJDBC

    • 导入jar包
    • 创建对象JdbcTemplate,依赖于数据源DataSource,new一个对象即可
    • 调用方法来完成增删改查操作

    Over!!!

  • 相关阅读:
    算法导论13:双向循环链表 2016.1.13
    ansible
    mariadb集群配置(主从和多主)
    连接查询,视图,事物,索引,外键(第四章)
    MariaDB第三章(select)
    mariadb第二章-增删改
    mariadb(第一章)
    keepalived概述
    git操作
    django后台admin管理布局
  • 原文地址:https://www.cnblogs.com/only666/p/13559957.html
Copyright © 2020-2023  润新知