MySQL+MyBatis

DDL(数据定义语言):

概念:

DDL用于定义数据库的结构和模式,包括创建、修改和删除数据库对象,如表、索引、视图、约束等。常见的DDL命令包括CREATE、ALTER和DROP等。

目的:

保证数据库中数据的正确性、有效性和完整性

约束:

非空约束:

限制该字段值不能为null

关键字:not null

唯一约束:

保证字段的所有数据都是唯一、不重复的

关键字:unique

主键约束:

主键是一行数据的唯一标识,要求非空且唯一

关键字:primary key

默认约束:

保存数据时,如果未指定该字段值,则采用默认值

关键字:default

外键约束:

让两张表的数据建立连接,保证数据的一致性和完整性

关键字:foreign key

格式:
create table 表名(
    字段1 字段类型 [约束] [comment 字段1注释]
    ……
    字段n 字段类型 [约束] [comment 字段n注释]
)[comment 表注释];

例子:

create table tb_user(
    id int primary key comment 'ID,唯一标识',
    username varchar(20) not null unique comment '用户名',
    name varchar(10) not null comment '姓名',
    age int comment '年龄'
    gender char(1) default '男' comment '性别'
)comment '用户表';

DDL(表操作)

  • 添加字段:alter tablr 表名 add 字段名 类型(长度) [comment 注释] [约束];
  • 修改字段类型:alter tablr 表名 modify 字段名 新数据类型(长度)
  • 修改字段名和字段类型:alter tablr 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]
  • 删除字段:alter tablr 表名 drop column 字段名
  • 修改表名:rename table 表名 to 新表名
  • 删除表:drop table [if exists] 表名;

DML(数据操作语言):

DML用于对数据库中的数据进行操作,包括插入、更新、删除和查询数据。常见的DML命令包括INSERT、UPDATE、DELETE和SELECT等。

  • 添加数据:(INSERT)
  • 修改数据:(UPDATE)
  • 删除数据:(DELETE)

insert:

  • 指定字段添加数据: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,……);

注意:

  1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
  2. 字符串和日期型数据应该包含在引号中
  3. 插入的数据大小,应该在字段的规定范围内

update:

  • 修改数据:update 表名 set 字段名 = 值1,字段名2 = 值2,……[where 条件];
  • where可以有,也可以没有,如果没有,则会修改整张表的所有数据

delete:

  • 删除数据:delete from 表名 [where 条件];
  • where可以有,也可以没有,如果没有,则会修改整张表的所有数据
  • DELETE语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将改字段的值置为null)

DQL(数据查询语言):

DQL用于查询数据库中的数据,它是最常用的数据库操作语言。通过DQL,可以从数据库中检索所需的数据。常见的DQL命令是SELECT,它允许用户指定要检索的数据列、条件和排序规则等。

select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段列表
having
    分组后条件列表
order by
    排序字段列表
limit
    分页参数

聚合函数:

count:统计数量
max:最大值
min:最小值
avg:平均值
sum:求和

案例1:查询员工

按需求完成员工管理的条件分页查询-根据输入条件,查询第一页数据,每页展示10条记录

  1. 根据输入的员工姓名、员工性别、入职时间 搜索满足条件的员工信息
  2. 其中 员工姓名,支持模糊匹配;性别 进行精确查询;入职时间 进行范围查询
  3. 支持分页查询
  4. 并对查询的结果,根据最后修改时间进行倒序排序
  • 输入条件:

    姓名:张
    性别:男
    入职时间:2000-01-01 ~ 2015-12-31

    select
    *
    from
    tb_emp
    where name like '%张%' 
    and gender = 1 
    and entrydate between '2000-01-01' and '2015-12-31'
    order by update_time desc
    limit 0,10
    

案例2-1:

完成员工性别信息统计

if(条件表达式,true取值,false取值)

select if(gender = 1,'男性员工','女性员工') 性别,count(*) from tb_emp group by gender;

案例2-2:

case 表达式 when 值1 then 结果1 when 值2 then 结果2 … else … end

select
    (case job when 1 then '班主任' when 2 then '讲师' when3 then '学工主管' when 4 then '教研主管' else '未分配岗位' end) 职
    count(*)
from tb_emp group by job;

外键语法:

  1. 创建时指定:
    create table 表名(
    字段名 数据类型,
    ……
    [constraint] [外键名称] foreign key(外键字段名) reference 主表(字段名)
    );
    
  2. 建完表后,添加外键

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

物理外键:

使用foreign key 定义外键关联另外一张表

缺点:
  1. 影响增、删、改的效率(需要检查外键关系)
  2. 仅用于单节点数据库,不适用于分布式、集群场景
  3. 容易引发数据库的死锁问题,消耗性能

逻辑外键:

  • 在业务层逻辑中,解决外键关联
  • 通过逻辑外键,就可以很方便的解决上述问题

一对一:

  • 案例:用户 与身份证信息 的关系
  • 关系:一对一关系,多用于单表拆分,将一张张表的基础阻断放在一张表中,其他字段放在另一张表中,以提升操作效率
  • 任意一方,添加外键,关联另一方的主键

一对多:

  • 在多的一方添加外键,关联另一方的主键

多对多:

  • 案例:学生 与 课程的关系
  • 关系:一个学生可以选修多门课程,一门课程也可以提供多个学生选择
  • 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

多表查询:

连接查询:

内连接:

相当于查询A、B交集部分数据

外连接:
  1. 左外连接:

    查询左表所有数据(包括两张表交集部分数据)

  2. 右外连接:

    查询右表所有数据(包括两张表交际部分数据)

子查询:

标量子查询:子查询返回的结果为单个值

列子查询:子查询返回的结果为一列

行子查询:子查询返回的结果为一行

表子查询:子查询返回的结果为多行多列

列子查询:

select entrydate,job from tb_emp where name = '韦一笑';
select * from tb_emp where entrydate = '2007-01-01' and job = 2;
等价于:select * from tb_emp where (entrydate,job)=('2007-01-01',2);
等价于:select * from tb_emp where (entrydate,job)=(select entrydate,job from tb_emp where name = '韦一笑');

表子查询:

查询入职时间是’2006-01-01’之后的员工信息,及其部门名称

select * from tb_emp where entrydate > '2006-01-01';

select e.*,d.name from (select * from tb_emp where entrydate > '2006-01-01') as e,tb_dept as d where e.dept_id = d.id

事务:

事务介绍:

事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作,要么同时成功,要么同时失败

注意:默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务

事务操作:

开启事务:start transaction;/begin;

提交事务:commit;

回滚事务:rollback;

四大特性:

  1. 原子性

    事务是不可分割的最小单元,要么全部成功,要么全部失败

  2. 一致性

    事务完成时,必须使所有的数据都保持一致

  3. 隔离性

    数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境上运行

  4. 持久性

    事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

索引:

索引是帮助数据库高效获取数据的数据结构

优点:

  1. 提高数据查询的效率,降低数据库的IO成本
  2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗

缺点:

  1. 索引会占用存储空间
  2. 索引大大提高了查询效率,同时也降低了insert、updata、delete的效率

结构:

MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。

我们平常所说的索引,如果没有特别指明,都是指默认的B+Tree结构组织的索引

B+Tree(多路平衡搜索树):

  1. 每一个节点,可以存储多个key(有n个key,就有n个指针)
  2. 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据
  3. 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询

语法:

  1. 创建索引

    create [unique] index 索引名 on 表名(字段名,……);

  2. 查看索引

    show index from 表名;

  3. 删除索引

    drop index 索引名 on 表名;

  • 注意事项:
    1. 主键字段,在建表时,会自动创建主键索引
    2. 添加唯一约束时,数据库实际上会添加唯一索引

Mybatis:

  1. 准备工作(创建springboot工程、数据库表user、实体类User)

  2. 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

    #驱动类名称
    spring.datasource.drive-class-name=com.mysql.cj.jdbc.Driver
    #数据库链接的url
    spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
    #链接数据库的用户名
    spring.datasource.username=root
    #连接数据库的密码
    spring.datasource.password=1234
    
  3. 编写SQL语句(注解/XML)
    @Mapper//在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
    public interface UserMapper {
       //查询全部用户
       @Select("select * from user")
       public List<User> list();
    }
    

test:

@Autowired
private UserMapper userMapper;
@Test
public void testListUser(){
    List<User> userList = userMapper.list();
    userList.stream().forEach(user -> {
        System.out.println(user);
    });
}       

数据库连接池:

  1. 数据库连接池是个容器,负责分配、管理数据库链接(Connection)
  2. 它允许应用程序重复使用一个现有的数据库链接,而不是再重新建立一个
  3. 释放空闲时间超过最大空闲时间的链接,来避免因为没有释放链接而引起的数据库链接遗漏

优势:

  1. 资源复用
  2. 提升系统响应速度
  3. 避免数据库链接遗漏

标准接口:DataSource

  • 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口
  • 功能:获取链接:Connection getConnection() throws SQLException;
  • springboot默认的是Hikari

Druid:

  • Druid连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一

切换连接池:

引入Druid的起步依赖就可以

创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇