最近学习了MySQL、JDBC以及MyBatis和Maven的相关内容,为JavaWeb的学习打基础。
以下为学习笔记:
SQL通用语法
不区分大小写
注释
单行注释:#注释内容
或-- 注释内容
多行注释:/* */
DDL数据定义语言
数据库操作
show databases; #查询当前data目录下的所有数据库
create database name; #创建数据库
create database if exists name; #如果没有这个数据库则创建
drop database name; #删除数据库
use name; #使用数据库
表的操作
show tables; #查询当前数据库所有表的名称
desc name; #查询表结构
drop table name; #删除表
#创建表
create table name (
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n
);
#修改表
alter table name1 rename to name2; #修改表名
alter table name1 add name2; #添加列
alter table name modify 列名 新数据类型; #修改数据类型
alter table name change 列名 新列名 新数据类型; #修改列名和数据类型
alter table name drop 列名; #删除列
数据类型
DML数据操作语言*
#添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...);
insert into 表名 values(值1,值2,...);
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数据查询语言*
#查询语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
基础查询
#查询多个字段
SELECT 字段列表 FROM 表名;
#查询所有数据
SELECT * FROM 表名;
#去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
#给字段起别名
SELECT 字段 AS 别名 FROM 表名;
条件查询
条件运算符:
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段1[排序方式],排序字段列表2[排序方式]…;
排序方式:ASC
升序排列(默认值)、 DESC
降序排列
如果有多个排序条件,当第一条件的值相同时,才会根据第二条件进行排序。
分组查询
聚合函数:
SELECT 聚合函数名(列名) FROM 表;
count(*) #只要这一行有一个值不为null就能被统计到
#null不参与聚合函数的运算
分组查询:
SELECT 字段列表 FROM 表名 [WHEHE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
分组之后,查询的字段为聚合函数和分组字段。
WHERE与HAVING区别:
- WHERE分组前进行限定,不满足的话就不参与分组。HAVING分组后进行条件过滤
- WHERE不能对聚合函数判断,HAVING可以。
执行顺序:WHERE>聚合函数>HAVING
分页查询
为MySQL的方言
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;
起始索引从0开始
约束
#主键自增长,
id INT PRIMARY KEY AUTO_INCREMENT
外键约束
将两个表的数据建立链接,保证数据一致性
#创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
#建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
#删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
数据库设计
表关系一对多
在多的一方建立外键关联一的一方的主键
多对多
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
一对一
在任意一方建立外键,关联对方主键,并设置外键唯一
多表查询
连接查询
内连接:查询两个表的交集部分
#显式内连接
SELECT * FROM 表1 INNER JOIN 表2 ON 条件
外连接:
- 左外连接:查询A表所有数据和交集部分数据
- 右外连接:查询B表所有数据和交集部分数据
#左外连接
SELECT * FROM 表1 LEFT JOIN 表2 ON 条件;
#右外连接
SELECT * FROM 表1 RIGHT JOIN 表2 ON 条件;
子查询
#单行单列:作为条件值进行条件判断
SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);
#多行单列:作为条件值,使用IN等关键字进行条件判断
SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);
#多行多列:作为虚拟表
SELECT 字段列表 FROM (子查询) WHERE 条件;
事务
一种机制,一个操作序列,包含了一组数据库操作命令
这一组命令要么同时成功,要么同时失败
START TRANSACTION; #或BEGIN,开启事务
COMMIT; #提交事务
ROLLBACK; #回滚事务
#MySQL中事务默认提交
四大特征:ACID
JDBC
JDBC导入Java项目
DriverManagerAPI
- 注册驱动
使用Class.forName("com.mysql.cj.jdbc.Driver")
注册驱动时,在Driver类的静态代码块中调用DriverManager的方法进行注册驱动
- 获取数据库连接
拥有getConnection()
方法可以获取数据库连接
ConnectionAPI
- 获取执行SQL的对象
//普通执行SQL对象
Statement createStatement();
//预编译SQL的执行SQL对象,防止SQL注入
PreparedStatement preparedStatement(sql);
- 管理事务
setAutoCommit(true) //开启事务,ture为自动开启,false为手动开启
commit(); //提交事务
rollback(); //回滚事务
StatementAPI
执行SQL语句
int executeUpdate(sql); //执行DML,DDL语句;返回DML语句影响的行数
ResultSet executeQuery(sql); //执行DQL语句;返回ResultSet结果集对象
ResultSetAPI
- 封装了DQL查询语句的结果
boolean next(); //将光标从当前位置向下移动一行,判断当前行是否为有效行
getXxx(参数) //获取数据,参数为int为列的编号,string为列的名称 ,xxx为数据类型
数据库连接池
标准接口:DataSource
Connection getConnection()
获取连接对象
Maven
用来管理和构建Java项目的工具
Maven项目基本结构
Maven模型
仓库
常用命令
compile //编译
clean //清除编译文件
test //测试
package //打包项目
install //安装到本地仓库
生命周期
描述一次构建过程中经历了多少个事件
生命周期有三套:
- clean:清理工作
- default:核心工作,编译,测试,打包,安装
- site:发布站点
同一生命周期中,执行后面的命令,前面的命令会自动执行
idea中配置Maven
Maven坐标
依赖管理
依赖范围
MyBatis
持久层框架,简化JDBC开发
持久层:
负责将数据保存到数据库的那一层代码
JavaEE架构:表现层,业务层,持久层