SQL数据库
数据库操作
DDL
操作数据库
#查询
show databases;
#创建
create database name;
create database if not exists name;
#删除
drop database name;
drop database if exists name;
#使用
select database();查看当前使用的
use name;
操作表
#查询当前数据库下所有表名称
show tables;
#查询表结构
desc name;
#创建表
create table name (
字段1 数据类型1,
字段2 数据类型2,
...
);
数据类型
修改表
#删除表
drop table name;
#删除表是判定表是否存在
drop table if exists name;
修改表
#修改表名
Alter Table name rename to newname;
#添加一列
Alter table name add 列名 数据类型;
#修改数据类型
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...),(值1,值2...);
Insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...);
#修改
updata 表名 set 列名1=值1,列名2=值2,....[where 条件];
#删除
Delete from 表名 [where 条件];
DQL
-- 基础查询
#查询多个字段
select 字段列表 from 表名;
select * from 表名; -- 查询所有数据
#去除重复记录
select distinct 字段列表 from 表名;
#起别名
AS xxx
-- 条件查询
select 字段列表 from 表名 where 条件列表;
/*
* between ... and ... (在某个范围之内都包含)
* in (多选一)
* like 占位符 模糊查询 _单个字符 %多个字符
* is null 是null
* is not null 不是null */
-- 排序查询
select 字段名称 from 表名 order by 排序字段1 [排序方式],排序字段2 [排序方式];
-- 排序方式
-- asc:升序(默认)
-- desc 降序
--分组查询
#聚合函数语法
select 聚合函数名(列名) from 表;
/*
* count(name) 统计数量(不能统计null)
* max(name) 最大值
* min(name) 最小值
* sum(name) 求和
* avg(name) 平均值 */
#分组查询语法
select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后条件;
#执行顺序
where 聚合函数 having
--分页查询
select 字段列表 表名 limit 起始索引 , 查询条目数;起始索引从0开始
起始索引 = (当前页码-1)*每页显示条数
数据库
约束
约束概念
约束是作用于表中列上的规则,用于限制加入表的数据
约束分类
外键约束
概念
外键用来让两个表之间的数据建立连接,保证数据一致性和完整性
添加
-- 创建表时添加外键约束
create table 表名(
列名 数据类型
...
[constraint] [外键名称] foreign key(外键列名) references 主表
);
-- 建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表名称(主表列名称);
--删除约束
alter table 表名 drop foreign key 外键名称;
数据库设计
表关系
一对多
在多的一方建立外键关联一的一方
多对多
建立中间表,至少包含两个外键,分别关联双方主键
一对一
在任意一方建立外键,关联对方主键,并设置外键唯一
多表查询
连接查询
内连接
相当于查询A B交集数据、
-- 隐式内连接
select 字段列表 from 表1,表2 where 条件
-- 显式内连接
select 字段列表 from 表1 inner join 表2 on 条件
外连接
左外连接
相当于查询A表所有数据和交集部分数据
右外连接
相当于查询B表所有数据和交集部分数据
-- 左外连接
select 字段列表 from 表1 left outer join 表2 on 条件
-- 右外连接
select 字段列表 from 表1 right outer join 表2 on 条件
子查询
查询嵌套查询
-- 单行单列
select 字段列表 from 表 where 字段名 = (子查询)
-- 多行单列
select 字段列表 from 表 where 字段名 in (子查询)
--多行多列:作为虚拟表
select 字段列表 from (子查询) where 子查询
事务
一种机制,一个操作序列,包含了一组数据库操作命令
同时成功同时失败
不可分割的逻辑单元
-- 开启事务
start transaction;
-- 或者
begin;
-- 提交事务
commit;
-- 回滚事务
rollback;
事务四大特征
原子性:不可分割
一致性:事务完成时,必须使所有数据都保持一致状态
隔离性:多个事务之间,操作的可见性
持久性:事务一旦提交或者回滚,他对数据库中数据改变是永久的
JDBC
JDBC简介
使用java操作关系型数据库的API
快速入门
//注册驱动
Class.Forname("com.mysql.jdbc.Driver");
//获取连接
Connecttion conn = DriverManager.getConnection(url,username,password);
//定义sql语句
String sql = 'updata...';
//获取执行SQL对象
Statement stmt = conn.createStatement();
//执行SQL
stmt.executeUpdata(sql);
数据库连接池
是容器,负责分配管理数据库连接
允许应用程序重复使用一个现有的数据库连接
Mybatis
看官方文档
Mybatis Plus
简称MP,是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率。
标准数据层开发
lombok
可简化POJO是实体类开发
MP分页查询功能
//1 设置分页拦截器作为bean
public class Mpcongfig {
@Bean
publice MybatisPlusInterceptor pageInterceptor() {
MybatisPlusIntercepter interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor
}
}
//2 执行分页查询
IPage page = new Page(2,3);
userDao.selectPage(page, null);
....
//开启日志
//在配置文件中
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
条件查询
组合查询条件
查文档去
查询投影
//查询结果包含模型类中部分属性
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.select(User::getId,User::getName,User::getAge);
List<User> userList = userDao.selectList(lqw);
Sout(userList);
//查询结果包含模型类中未定义的属性
QuertWrapper<User> qm = new QueryWrapper<User>();
qm.select("count(*) as nums,gender");
qm.groupBy("gender");
List<String, Object>> maps = userDao.selectMaps(qm);
Sout(maps);
字段映射与表名映射
名称:@TableField
类型:属性注解
位置:模型类属性定义上方
作用:设置当前属性对应数据表中的字段关系
Value:设置数据库表字段名称
exist:设置属性在数据库表字段中是否存在
名称:@TableName
类型:类注解
位置:模型类定义上方
作用:设置当前类对应数据表中的表关系
Value:设置数据库表名称
多记录操作
//按照主键删除多条记录
List<Long> ids = Arrays.aList(new Long[]{2,3});
userDao.deleteBatchIds(ids);
//根据主键查询多条记录
List<Long> ids = Arrays.asList(new Long[]{2,3});
List<User> userList = userDao.selectBatchIds(ids);
逻辑删除
数据库表中添加逻辑删除标记字段
实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
public class User { private Long id; @TableLogic private Integer deleted; }
配置逻辑删除字面值
乐观锁
数据库表中添加锁标记字段
实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
public class User { private Long id; @Version private Integer version }
配置乐观锁拦截器
使用乐观锁机制在修改前必须先获取到对应数据的Version方可正常进行
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~