java9 mysql_java基础9:数据库

unit1 数据库

1.MySQL:

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

2.SQL概念:

Structured Query Language,结构化查询语言,关系型数据库

SQL语言,单行多行都行,分号结束“;”,语句不区分大小写,关键字建议大写

单行注释:-- 注释内容     # 注释内容

多行注释:/* 注释内容 */

09d595e4945e0419b983a5f13e4465b2.png

3.SQL语句:

61dab898f17ade0eea387e42e76c1d7c.png

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,完美范式

5386641ae34572e7c089d10bc0de7342.png

函数依赖: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

特征:原子性,持久性,隔离性,一致性

1df24b58201d1a29c88754bd98a78738.png

隔离级别:原本相互独立,但是多个事务操作同一批数据的话,会引发问题。安全级别高,则效率低

查询:select @@tx_isolation;

设置:set global transation isolation level 级别字符串;

09c2c0f4a4daf10ab97235827dc97cad.png

在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语言操作数据库,定义了一套操作所有关系型数据库的规则(接口)

b5aa37e544077a883e07d747c0b23197.png

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

导入驱动jar包:复制jar包,粘贴在libs包下面,右键--Add as Library

注册驱动

获取数据库连接对象Connection

定义SQL语句

获取执行SQL语句的对象statement

执行SQL,接受返回结果

处理结果

释放资源

//注册驱动

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值