JavaWeb

JavaWeb

SQL:

进入Mysql

image-20250521174125231

1.SQL语句可以单行或多行写,以分号结束

2.注释: 单行注释: – 注释内容(中间要有一个空格隔开)

#注释内容(中间没有空格)

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

DDL (操作数据库)

查询:show databases;

创建:create database 数据库名称;

(判断,如果不存在则创建)

create database if not exists 数据库名称;

删除:drop database 数据库名称;

(判断,如果不存在则删除)

drop database if not exists 数据库名称;

使用当前数据库

(查看当前数据库) select database();

(使用数据库) use 数据库名称;

DDL (操作表)

查询当前数据库下所有表:

show TABLES;

查询表结构

DESC 表名称;

创建表

CREATE TABLE 表名(

字段名 数据类型 ,

字段名 数据类型

);

删除表

DROP TABLE 表名;

删除表时判断是否存在

DROP TABLE IF EXISTS 表名;

修改表

改表名

alter table 表名 rename to 新的表名;

添加一列

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

修改数据类型

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

修改列名和数据类型

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

删除列

alter table 表名 drop 列名;

DML

添加数据

给指定列添加数据

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

给全部列添加数据

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

批量添加数据

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

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

修改数据

修改表数据

update 表名 set 列名1=值1,列名2=值2,…[WHERE 条件];

删除数据

delete from 表名 [where 条件];

DQL

基础查询

查询多个字段

select 字段列表 from 表名;

image-20250521214118357

查询所有数据

select * from 表名;

image-20250521214033856

去除重复记录(使用关键字distinct)

select distinct 字段列表 from 表名;

image-20250521214155055

起别名

AS :as 也可省略

image-20250521214300399

条件查询

查询语法:

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

条件

image-20250521215348100

排序查询

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

排序方式:升序:asc 降序:desc

注:如有多个排序条件,当前边条件值一样时,才会根据第二条条件

聚合函数:将一列数据作为一个整体,进行纵向计算

聚合函数的分类

image-20250522194658613

聚合函数的语法

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

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

分组查询

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

where和having区别

执行时机不一样:where分组之前进行限定,不满足where,不参与分组,having是分组之后进行过滤

where不能对聚合函数进行判断,having可以

顺序 :where>聚合函数>having

分页查询(limit)

image-20250522202404214

约束

概念:作用在表中列上,用于限制加入表的数据,为保证数据库中数据的正确性,有效性和完整性

image-20250522203638328

约束添加

语法:

创建表时添加

create table 表名(

列名 数据类型 约束;

….

);

建完表之后添加

alter table 表名 modify 字段名 数据类型 约束;

删除约束

alter table modify 字段名 数据类型;

外键约束

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

语法

添加约束

创建表时添加

create table 表名(

列名 数据类型;

….

constraint 外键名称 foreign key (外键列名) references 主表(主表列名)

);

建完表之后添加

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名)

删除约束

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

数据库设计

表的关系

一对多和一对一都通过外键来构造

多对多要通过第三张表来构造

多表查询分类

连接查询:内连接 外连接:右外连接 左外连接

子查询

image-20250522212635090

内连接语法(相当于查询A B交集数据)

隐式内连接

select 字段列表 from 表一,表二… where 条件;

显示内连接

select 字段列表 from 表1 inner join 表二 on 条件;

外连接语法

左外连接(以上面图为例,A集合和交集部分)

select 字段列表 from 表1 left join 表二 on 条件;

右外连接(以上面图为例,B集合和交集部分)

select 字段列表 from 表一 right join 表二 on 条件;

子查询

image-20250523125700795

JDBC

它是Java程序访问数据库的标准接口。

使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

image-20250523155214474

JDBC基本步骤

项目搭建

1.

image-20250523162423243

2.

image-20250523162647571

image-20250523162724077

有此提示

注册驱动(但是从jdk6开始,会自动导入此类,就可省略不写)

Class.forName(“com.mysql.jdbc.Driver”);

也可用DriverManager.registerDriver(com.mysql.jdbc.Driver)

image-20250523165756691

Connection

JDBC重要的接口,建立与数据库的连接

建立时需要指定的数据库url,用户名,密码参数

url:

jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值

image-20250523170329345

若连接本机,且端口未改变,则可以省略主机名称:mysql服务端口号,即jdbc:mysql:///数据库名称?参数=值&参数=值

用户名和密码

user,password可以用“属性名=属性值”

image-20250523171306437

Statement和PreparedStatement

Statement作用执行SQL语句

int executeUpdate(sql):用于执行DML,DDL

返回值:1.DML语句影响的行数 2.DDL语句后,执行可能为0

ResultSet executeQuery(sql) :用于执行DQL

返回值:ResultSet结果集对象

DML,DDL语句

image-20250523173250855

因为DML用于操作数据库中的数据,包括插入、更新、删除和查询数据

DDL用于定义和修改数据库的结构,包括创建、修改、删除数据库对象

所以影响的行数为0或1

处理结果时判断是否为0,则可判断是否成功

DQL

因为是查询语句,所以要用到ResultSet

ResultSet:

作用:封装DQL查询结果

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

image-20250523174346248

对比

image-20250523175109588

PreparedStatement

之所以会用到PreparedStatement,是因为Statement存在SQL注入(存在于登陆)

image-20250523175318098

详细可见:(JDBC查询 - Java教程 - 廖雪峰的官方网站

使用PreparedStatement可以完全避免SQL注入的问题,因为PreparedStatement始终使用“?”作为占位符,并且把数据连同SQL本身传给数据库,这样可以保证每次传给数据库的SQL语句是相同的,只是占位符的数据不同,还能高效利用数据库本身对查询的缓存。上述登录SQL如果用PreparedStatement可以改写如下:

image-20250523175655357

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值