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!!!

posted @ 2020-09-01 12:00  only~~  阅读(211)  评论(0编辑  收藏  举报