首页 > 数据库 >数据库学习笔记(黑马-Javaweb课程)

数据库学习笔记(黑马-Javaweb课程)

时间:2024-09-09 17:52:41浏览次数:12  
标签:多表 Javaweb 数据库 外键 查询 表名 黑马 select

  • 概述

  • P80.课程介绍:

    • 数据库:存储和管理数据的仓库
    • SQL:操纵做关系型数据库的编程语言
    • 数据库管理系统:DBMS,操纵和管理数据库的大型软件
    • 课程介绍:数据的的设计,数据库的操作,数据库的优化-索引
  • P81.MySQL-概述-安装配置
  • P82.数据模型&SQL简介
    • 关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
      • 特点:格式统一,便于维护;使用SQL语言操作,标准统一,可用于复杂查询
    • SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
      • 可单行,可多行,以分号结尾
      • 可以用空格/缩进增强语句的可读性
      • MySQL数据库的SQL语句不区分大小写
      • 注释:单行:--注释内容 或 #注释所有(MySQL特有);多行:/*注释内容*/
    • SQL分类:
      • DDL:数据定义语言
      • DML:数据操作语言
      • DQL:数据查询语言
      • DCL:数据控制语言
  • DDL

  • P83.DDL-数据库操作
    • DDL,数据定义语言,用来定义数据库对象(数据库,表)。
    • 查询:show databases
    • 创建:creat database (if not exists)数据库名
    • 删除:drop database (if exists)数据库名
    • 使用:use 数据库名
    • 注意事项:上属语法中的database,也可以替换成schema.
  • P84.DDL-图形化工具
    • ......IDEA中有
  • P85.DDL-表结构操作-创建
    • creat table 表名(

字段1 字段类型 [约束] [ comment 字段1注释],

......

字段n 字段类型 [约束] [ comment 字段n注释]

)[ comment 表注释];

  • 约束:作用于表中字段上的规则,用于限制存储在表中的数据。目的是为了保证数据库中数据的正确性、有效性和完整性。
    • 外键约束:foreign key ,让两张表的数据建立连接,保证数据的一致性和唯一性
    • 默认约束:default ,保存数据是,如果未指定该字段值,则采用默认值
    • 主键约束:primary key ,一行数据的唯一标识,要求非空且唯一
    • 唯一约束:unique ,保证字段是唯一的,不重复的
    • 非空约束:not null ,限制字段不能为空
  • P86.DDL-表结构操作数据类型
    • MySQL中主要分为三类:数值类型、字符串类型、日期时间类型。
    • 数值类型:有符号数,无符号数
    • 字符串类型:char/varchar...;cha(10):最多占10个字符,不足10个字符,占用10个字符空间,varchar(10)最多只能存10个字符,不足10个字符,按照实际长度呢存储。
    • 日期类型:date:年月日;time:时分秒;year:年份;datetime:年月日时分秒;
  • P87.DDL-表结构操作-创建-案例

  • P88.DDL-表结构操作-查询&修改&删除
    • 查询
      • show tables;查询当前数据库所有表
      • desc 表名;查询表结构
      • show create table 表名;查询链表语句
    • 修改
      • 添加字段:alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];
      • 修改字段:alter table 表名 modify 新数据类型(长度);
      • 修改字段名和字段类型:alter table 表名 change 旧字段名 类型(长度)[comment 注释] [约束];
      • 删除字段:alter table 表名drop column 字段名;
      • 修改表名:rename table 表名 to 新表名;
    • 删除
      • 删除表:drop table [if exists] 表名;
  • DML

  • P89.DML-添加数据insert
    • DML:数据操作语言,用来对数据库中表的数据记录进行增、删、改操作。
    • 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,...);
    • 报错情况:

    • 解决:

https://wenku.csdn.net/answer/36d4b1a2e4d611edbcb5fa163eeb3507

这是一个SQL语法错误,在编写SQL语法的过程中,可能出现格式错误的情况,建议严格检查。

  • P90.DML-修改数据-update
    • 修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2,...[where 条件];

  • P91.DML-删除数据-delete
    • 删除数据:delete from 表名 [where 条件];
    • 注意事项:delete语句的条件可有可无,若没有条件,则删除整张表的数据;delete语句不能删除某一字段的值(若要此操作,可以用update,将该字段置为null)。
  • DQL

  • P92.DQL-基本查询
    • 数据库操作-DQL(数据库查询语言)。关键字:SELECT。
    • 基本查询语法:
      • 查询多个字段:select 字段1,字段2,字段3 from 表名;
      • 查询所有字段(通配符):select * from 表名;
      • 设置别名:select 字段1 [as 别名1],字段2 [as 别名2] from 表名;
      • 去除重复记录:select distinct 字段列表 from 表名;
  • P93.DQL-条件查询
    • select 字段列表 from 表名 where 条件列表;
    • 比较运算符,逻辑运算符
  • P94.DQL-聚合函数
    • 将一列数据作为一个整体,进行纵向计算。语法:select 聚合函数(字段列表) from 表名。
    • 函数和功能:(不对null值进行运算)
      • count:统计数量。count(字段);count(常量);count(*)(推荐使用);
      • max:最大值
      • min:最小值
      • avg:平均值
      • sum:求和
  • P95.DQL-分组查询
    • 语法:select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
    • where和having区别
      • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤;
      • 判断条件不同:where不能对聚合函数进行判断,而having可以。
    • 执行顺序:where>聚合函数>having

  • P96.DQL-排序查询
    • 语法:select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1,字段2 排序方式2...;
    • ASC:升序(默认)
    • DESC:降序
  • P97.DQL-分页查询
    • 语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
    • 注意事项:
      • 起始索引是从0开始的,起始索引=(查询页码-1)*每页显示记录数
      • 分页查询是数据库的方言,不同的数据库有不同的实现方式,MySQL中是LIMIT
      • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
  • P98.DQL-案例
    • 函数
      • if(表达式,tvalue,fvalue):当表达式为true时,取值为tvalue;当表达式为false时,取值fvlue;
      • case expr where value1 then result1 [when value2 then value2...] [else result] end
    • 总结
  • 多表设计

  • P99.多表设计-一对多
    • 在数据库表中多的一方,添加字段,来关联一的一方的主键。
  • P100.多表设计-一对多-外键
    • 外键语法:-- 创建表时指定:

                    create table 表名(

                        ...

                       [constarint] [外键名称] foreign key (外键字段名) references 主表(字段名)

                      );

                        -- 建完表后,添加外键

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

  • 外键约束
    • 逻辑外键:在业务层逻辑中,解决外键关联。通过逻辑外键,就可以很方便的解决上述问题。
    • 物理外键缺点:
      • 影响增、删、改的效率(需要检查外键关系)
      • 仅用于单节点数据库,不适用于分布式,集群场景
      • 容易印发数据库的死锁问题,消耗性能。
    • 物理外键:使用foreign key 定义外键关联的一张表
  • P101.多表设计-一对一&多对多
    • 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率。
    • 实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(UNIQUE)
    • 多对多:例如:一个学生可以选修多个课程,一个可能也可以供多个学生选择、
    • 多对多实现:建立第三张中间表,中间表至少包含两个外间,分别关联两方主键
  • P102.多表设计-案例-关系分析
    • 参考页面原型及需求,设计合理的表结构
    • 一对多:在多的一方添加外键,关联另外一方的主键
    • 一对一:任意一方,添加外键,关联另外一方的主键
    • 多对多:通过中间表来维护,中间表的两个外键,分别关联另外两张表的主键
  • P103.多表设计-案例-表结构

多表查询

  • P104.多表查询-概述
    • 多表查询:指从多张表中查询数据
    • 笛卡尔积:笛卡尔成绩是指在数学中,两个集合(A集合和B集合)的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)
    • 分类:
      • 连接查询:
        • 内连接:相当于查询A,B交集部分
        • 外连接:
          • 左外连接:查询左表所有数据(包括两张表交集部分)
          • 右外连接:查询右表所有数据(包括两张表交集部分)
      • 子查询:
  • P105.多表查询-内连接
    • 语法:
      • 隐式内连接:select 字段列表 from 表1,表2 where 条件...;
      • 显式内连接:select 字段列表 from 表1 [inner] join 表2 on 连接条件...;
  • P106.多表查询-外连接
    • 左外连接:select 字段列表 from 表1 left [outer] jion 表2 on 连接条件...;
    • 右外连接:select 字段列表 from 表1 right [outer] jion 表2 on 连接条件...;
  • P107.多表查询-子查询
    • 介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询
    • 形式:select * from t1 where column1 = (select column1 from t2 ...)
    • 子查询外部的语句可以是insert/update/delete/select的任何一个,最常见的是select
    • 标量子查询
      • 子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式
      • 常用的操作符:= <> > >= < <=
    • 列子查询
      • 子查询返回的结果是一列(可以是多行)
      • 常用的操作符:in、not in等
  • P108.多表查询-子查询(行、表)
    • 行子查询
      • 子查询返回的结果是一行(可以是多列)
      • 常用的操作符:=、<>、in、not in等

  • P109.多表查询-案例1
  • P110.多表查询-案例2
    • 内连接:
    • 外连接:
    • 子查询:
  • 事务

  • P111.事务-介绍与操作
    • 概念:事务是一组操作的集合,他是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失效
    • 注意事项:默认MySQL的事务是自动提交的,也即是说,当执行一条DML语句,MySQL会立即隐式地提交事务。
    • 事务控制:
      • 开始事务:start transaction;/begin;
      • 提交事务:commit
      • 回滚事务:rollback
  • P112.事务-四大特性
    • 四大特性(ACID):原子性,一致性,隔离性,持久性
  • P113.索引-介绍
    • 索引:帮助数据库高效获取数据的数据结构
    • 优缺点:
      • 优点:提高数据查询的效率,降低数据库的IO成本;通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
      • 缺点:索引会占用存储空间;索引大大提高了查询效率,同时也降低了insert、update、delete的效率。
  • 索引

  • P114.索引-结构
    • 结构:我们平常所说的索引,如果没有特别指明,都是指默认的B+Tree结构组织的索引
    • B+Tree(多路平衡搜索树)
      • 每一个节点,可以存储多个key,(有n个key,就有n个指针)
      • 所有的数据都存储在叶子节点,飞叶子节点仅用于索引数据
      • 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询
  • P115.索引-操作语法
    • 创建索引:create [unique] index 索引名 on 表名 (字段名,...);
    • 查看索引:show index from 表名;
    • 删除索引:drop index 索引名 on 表名;
    • 注意事项:
      • 主键字段,在建表时,会自动创建主键索引。
      • 添加唯一约束时,数据库实际上会添加唯一索引。

标签:多表,Javaweb,数据库,外键,查询,表名,黑马,select
From: https://blog.csdn.net/qq_41924536/article/details/141937910

相关文章