Javaweb-MySQL基础

 目录

一、MySQL数据模型

二、DDL --操作数据库

1.查询

2.创建

3.删除

4.使用数据库

三、DDL --操作表

查询表

创建表 

MySQL 数据类型

删除表 

修改表

四、DML

添加数据

修改数据

五、DQL

基础查询

条件查询

排序查询

分组查询

聚合函数

分组查询

分页查询

六、约束

约束的概念和分类

外键约束

七、多表查询

 1.内连接

 2.外连接

 3.子查询

八、事务

事务简介

事务四大特征 (ACID)

九、JDBC

步骤

ResultSet

PreparedStatement

十、数据库连接池

数据库连接池简介

数据库连接池实现

1.导入jar包

2.配置druid.properties 定义配置文件

3.加载配置文件

4.获取连接池对象

5.获取数据库连接 connection


一、MySQL数据模型

关系型数据库

        关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库

优点:1.都是使用表结构,格式一致,易于维护

           2.使用通用的SQL语言操作,使用方便,可用于复杂查询

           3.数据存储在磁盘中,安全

d0e96183d7bc46ebb5382140d72fea95.png

 二、DDL --操作数据库

1.查询

show databases;

2.创建

a.创建数据库

create database 数据库名称;

b.创建数据库(判断,如果不存在则创建)

create database if not exists 数据库名称;

3.删除

a.删除数据库

drop database 数据库名称;

b.删除数据库(判断,如果存在则删除)

drop database if exists 数据库名称;

4.使用数据库

a.查看当前使用数据库

select database();

b.使用数据库

use 数据库名称;

三、DDL --操作表

查询表

        查询当前数据库下所有表名称

show tables;

        查询表结构

desc 表名称;

创建表 

create table 表名{

                字段名1 数据类型1,

                字段名2 数据类型2,

                ........

                字段名n 数据类型n

};

注意:最后一行末尾,不能加逗号

MySQL 数据类型

分类数据类型大小描述
数值类型TINYINT1 byte小整数值
SMALLINT2 bytes大整数值
MEDIUMINT3 bytes大整数值
INT或INTEGER4 bytes大整数值age int
BIGINT8 bytes极大整数值
FLOAT4 bytes单精度浮点数值
DOUBLE8 bytes双精度浮点数值score double(总长度,小数点后保留的位数)  0~100 2
DECIMAL 小数值
日期和时间类型DATE3日期值birthday date
TIME3时间值或持续时间
YEAR1年份值
DATETIME8混合日期和时间值
TIMESTAMP4混合日期和时间值,时间戳“张三”
字符串类型CHAR0-255 bytes定长字符串name char(10)    10个字符空间     存储的性能高  浪费空间
VARCHAR0-65535 bytes变长字符串name varchar(10)   2个字符空间      存储性能低  节约空间
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

删除表 

a.删除表

drop table 表名;

b.删除表时判断是否存在

drop table if exists 表名;

 修改表

1.修改表名

alter table 表名 rename to 新表名;

2.添加一列

alter table 表名 add 列名 数据类型;

3.修改数据类型

alter table 表名 modify 列名 新数据类型;

4.修改列名和数据类型

alter table 表名 change 列名 新列名 新数据类型;

5.删除列

alter table 表名 drop 列名;

 四、DML

添加数据

1.给指定列添加数据

insert into 表名(列名1,列名2,.....) values(值1,值2,.....);

2.给全部列添加数据

insert into 表名 values (值1,值2,.....);

3.批量添加数据

insert into 表名(列名1,列名2,.....) values(值1,值2,.....),(值1,值2,.....).....;

insert into 表名 values(值1,值2,.....),(值1,值2,.....).....;

修改数据

update 表名 set 列名1=值1,列名2=值2,... [where 条件]; 

注意:修改语句如果不加条件,则将所有数据都修改 

删除数据

delete from 表名 [where 条件];

注意:删除语句如果不加条件,则将所有数据都删除

五、DQL

基础查询

1.查询多个字段

select 字段列表 from 表名;
select * from 表名; --查询所有数据

 2.去除重复记录

select distinct 字段列表 from 表名;

3.起别名

AS : AS 也可以省略

条件查询

1.条件查询语法

select 字段列表 from 表名 where 条件列表;

2.条件

20786fb4ace54225a02f85bc75915d6a.png

 排序查询

select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段名2[排序方式2]...;

排序方式:

1.asc:升序排列(默认值)

2.desc:降序排列

注意:如果有多个排序条件,当前面条件值一样时,才会根据第二条件进行排列

分组查询

聚合函数

1.概念:将一列数据作为一个整体,进行纵向计算。

2.聚合函数的分类

80e1e3ce31634adc9969425fea67ff95.png

 3.聚合函数语法

select 聚合函数名(列名) from 表;

注意:null值不参与所有聚合函数运算

分组查询

1.分组查询语法

select 字段列表 from 表名[where 分组前条件限定] group by 分组字段名
[having 分组后条件过滤];

注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

where和having的区别

执行的时机不一样:where是分组之前的限定,不满足where条件不参与分组,而having是分组之后对结果的过滤。

可判断的条件不一样:where不能对聚合函数进行判断,having可以

执行顺序:where>聚合函数>having

分页查询

1.分页查询语法

select 字段列表 from 表名 limit 起始索引,查询条目数;

起始索引:从0开始

计算公式:起始索引=(当前页码-1)*每页显示条数

tips:

分页查询limit是mysql的方言

oracle分页查询使用rownumber

sql server分页查询使用top

六、约束

约束的概念和分类

1.约束的概念

约束时作用于表中列上的规则,用于限制加入表的数据

约束的存在保证了数据库中数据的正确性,有效性和完整性

2.约束的分类

d9f8add12afd40f788280514b7007847.png

外键约束

1.概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

2.语法

(1)添加约束

--创建表时添加外键约束
create table 表名(
    列名 数据类型,
    ...
    [constraint] [外键名称] foreign key(外键列名) references 主表(主表列名)
);
--建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key(外键字段名称)references 主表名称(主表列名称);

 (2)删除约束

alter table 表名 drop foreign key 外键名称;

七、多表查询

笛卡尔积:取A和B集合所有的组合情况

多表查询:从多张表查询数据

1.连接查询

        ->内连接:相当于查询A、B交集数据

        ->外连接:

                        &左外连接:相当于于查询A表所有数据和交集部分数据

                        &右外连接:相当于于查询B表所有数据和交集部分数据

  2.子查询

16d8596901724cf3b7e48a5c35f04f84.png

 1.内连接

内连接查询语法

--隐式内连接
select 字段列表 from 表1,表2...where条件;
--显示内连接
select 字段列表 from 表1[inner] join 表2 on 条件;

2.外连接

外连接语法

--左外连接
select 字段列表 from 表1 left outer join 表2 on 条件;
--右外连接
select 字段列表 from 表1 right outer join 表2 on 条件;

3.子查询

1.子查询概念:查询中嵌套查询,称嵌套查询为子查询

2.子查询根据查询结果不同。作用不同

单行单列 多行单列 多行多列

--单行单列 作为条件值,使用= != <>等进行判断
select 字段列表 from 表 where 字段名=(子查询);
--多行单列:作为条件值,使用in关键字进行条件判断
select 字段列表 from 表 where 字段名 in(子查询);
--多行多列 作为虚拟表
select 列表 from (子查询)where 条件;

八、事务

事务简介

数据库的事务是一种机制,一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功要么同时失败

事务是一个不可分割的工作逻辑单元

--开启事务
start transaction;
--或
begin;

--提交事务
commit;

--回滚事务
rollback;

事务四大特征 (ACID)

1.原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功要么同时失败

2.一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态

3.隔离性(Isolation):多个事务之间,操作性可见

4.持久性(Durability):事务一旦提交或回滚,他对数据库中的数据的改变时永久的

九、JDBC

JDBC概念

JDBC就是使用JAVA语言操作关系型数据库的一套API

全称:(Java DataBase Connectivity)Java数据库连接

JDBC本质

官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口

各个数据库厂商取实现这套接口,提供数据库驱动jar包

我们可以用这套接口(JDBC)编程,真正执行代码的是驱动jar包中的实现类

步骤

0.创建工程,导入驱动jar包


 

//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
String username = "xxx";
String password = "xxx";
Connection conn = DriverManager.getConnection(url,username,password);
//3.定义sql语句
String sql = "update...";
//4.获取执行sql对象
Statement stmt = conn.createStatement();
//5.执行sql
stmt.executeUpdate(sql);
//6.处理返回结果
//7.释放资源
stmt.close();
conn.close();

ResultSet

1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql) 执行DQL语句,返回ResultSet对象

2.获取查询结果

boolean next()   (1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行

返回值 true or false

3.xxx getXxx(参数) 获取数据

xxx:数据类型 如 int getInt(参数)

参数 int:列的编号,从1开始

PreparedStatement

preparedstatement作用

1.预编译sql语句并执行,预防sql注入问题

2.sql注入:是通过操作输入来修改事先定义好的sql语句,用以达到执行代码对服务器进行攻击的方式

//SQL语句中的参数值,使用?占位符来代替
String sql = "select * from user where username=? and password = ?";
//通过connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

//设置参数值
//PreparedStatement对象:setXxx(参数1,参数2):给?赋值
//Xxx:数据类型 如 setint(参数1,参数2)
//参数1:?的位置编号 从1开始
//参数2:?的值

//执行sql
pstmt.executeUpdate(); 或 pstmt.executeQuery(); //不需要再传递sql

十、数据库连接池

数据库连接池简介

数据库连接池是一个容器。负责分配,管理数据库连接

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

好处:资源重用 提升系统响应速度 避免数据库连接遗漏

数据库连接池实现

标准接口:DataSource

官方(sun)提供的数据库连接池标准接口,由第三方组织实现此接口

功能:获取连接

Connection getConnection();

 常见数据库连接池

DBCP C3P0 Druid

Druid(德鲁伊)

Durid连接池是阿里巴巴开源的数据库连接池项目

功能强大,性能优秀,是Java语言最好的数据库连接池之一

1.导入jar包

718215808d59495bb3568389d17ee69f.png

2.配置druid.properties 定义配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

 3.加载配置文件

Properties prop = new Properties();
prop.load(new FileInputStream("druid.properties文件路径"));

4.获取连接池对象

DataSource dataSource = DuridDataSourceFactory.createDataSource(prop);

5.获取数据库连接 connection

Connection conn = dataSource.getConnection();
System.out.println(conn);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

725.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值