数据库设计与操作的重要知识点

(原创) 数据库的重要知识点 😄 (复习用)


一、数据库单表设计与查询

  • DDL--数据库定义语言

  • 数据库操作
    • 查询数据库
      • 查询所有数据库:show databases;

      • 查询当前数据库:select database();

    • 创建数据库
      • 创建数据库:create database [if not exists] 数据库名;

    • 删除数据库
      • 删除数据库:drop database [if exists] 数据库名;

    • 使用数据库
      • 使用数据库:use 数据库名;


  • 表操作
    • 创建表
       create table 表名
       (
          字段名1 数据类型(长度) [comment '注释'] [约束],
          字段名2 数据类型(长度) [comment '注释'] [约束],
          字段名3 数据类型(长度) [comment '注释'] [约束],
          ...
       ) comment '表注释';
      
    • 删除表
      • 删除表:drop table 表名;

    • 查询表
      • 查询当前数据库所有表:show tables;

      • 查询表结构:desc 表名;

      • 查询表的创建语句:show create table 表名;

    • 修改表
      • 添加字段:alter table 表名 add 字段名 数据类型(长度) [comment '注释'] [约束];

      • 修改字段类型:alter table 表名 modify 字段名 新数据类型(长度) [comment '注释'] [约束];

      • 修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度) [comment '注释'] [约束];

      • 删除字段:alter table 表名 drop column 字段名;

      • 修改表名:rename table 表名 to 新表名;


  • 约束
    • 主键约束
      • primary key

    • 唯一约束
      • unique

    • 非空约束
      • not null

    • 默认约束
      • default

    • 外键约束
      • foreign key

      • 1.create table 表名
        (
        字段名1 数据类型(长度) [comment '注释'] [约束],
        ...
        [constraint 外键名 foreign key(字段名) references 主表名(主表字段名)]
        ) comment '表注释';

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

    • 检查约束
      • check


  • 数据类型
    • 数值类型 ???
    • 字符串类型???
    • 日期时间类型 ???

参考同级目录下文件MYSQL数据类型.xlsx


注意:数据库名和表名不能包含特殊字符,表名不能包含空格。

  • DML--数据库操作语言

  • 表操作
    • 添加数据
      • 指定字段添加数据:insert into 表名(字段名1,字段名2,字段名3,...) values(值1,值2,值3,...);

      • 全部字段添加数据:insert into 表名 values(值1,值2,值3,...);

      • 批量添加数据(指定字段):insert into 表名(字段名1,字段名2,字段名3,...) values(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);

      • 批量添加数据(全部字段):insert into 表名 values(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);

    • 修改数据
      • update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3 [where 条件];

    • 删除数据
      • delete from 表名 [where 条件];

数据库获取当前时间函数:now()
数据库获取当前日期函数:curdate()
delete语句不能删除某一个字段的值,如果要删除某一个字段的值,需要使用update语句,将该字段的值设置为null。


  • DQL--数据库查询语言

  • 查询数据
    • 基本查询
      • 查询所有字段:select * from 表名;

      • 查询指定字段:select 字段名1,字段名2,字段名3,... from 表名;

      • 查询别名:select 字段名1 as 别名1,字段名2 as 别名2,字段名3 as 别名3 from 表名; //as可以不写,别名有空格会报错,用'包裹'。

      • 去除重复记录:select distinct 字段名1,字段名2,字段名3,... from 表名;

    • 条件查询
      • select 字段名1,字段名2,字段名3,... from 表名 where 条件;

      • 比较运算符:=,>,<,>=,<=,<>,!=,!>,between and,in,like,is null,is not null,and,or,not

      • 逻辑运算符:and,or,not

      • 模糊查询:like,%代表0个或多个字符,_代表一个字符

      • 范围查询:in,not in

      • 空值查询:is null,is not null

      • 优先级:小括号,not,比较运算符,逻辑运算符,优先级由高到低。

    • 聚合函数
      • count(*) 统计行数

      • sum(字段名) 求和

      • avg(字段名) 求平均值

      • max(字段名) 求最大值

      • min(字段名) 求最小值

      • 1.聚合函数不能直接使用在where后面,需要使用group by分组查询。
        2.null值不参与运算。

    • 分组查询
      • group by 分组字段列表

      • having 分组后条件列表

      • select 字段列表 from 表名 [where 条件] group by 分组字段列表 [having 分组后条件列表];

      • 1.分组后,查询的字段只能是分组字段和聚合函数。
        执行顺序:where>聚合函数>having

      • 2.where和having的区别:

        • 执行时间不同:where是分组之前进行过滤,不满足条件,不参与分组,having是分组之后进行过滤,不满足条件的数据,不会被查询出来。
        • 判断条件不同:where不能使用聚合函数进行判断。having可以使用聚合函数进行判断。
    • 排序查询
      • order by 排序字段列表

      • select 字段列表 from 表名 [where 条件] [group by 分组字段列表] [order by 排序字段列表];

      • 1.排序字段列表可以支持单个字段、多个字段、表达式、函数、别名。

        2.order by 排序字段列表支持倒序排序:desc,正序排序:asc(默认)。

        3.order by 排序字段列表支持多个字段的排序:先按照第1个字段排序,如果第1个字段相同,再按照第2个字段排序,依次类推。

    • 分页查询
      • limit 起始索引,查询条数。

      • select 字段列表 from 表名 limit 起始索引,查询条数;

      • 1.起始索引的索引从0开始。

      • 2.起始索引可以省略,默认从0开始。

      • 3.起始索引可以支持负数,表示倒数第几个。

      • 4.起始索引和查询条数可以同时省略,表示查询所有数据。

注意:if和case的使用。


二、数据库多表设计与查询

  • 多表之间关系

    • 1.一对多(多对一)关系:员工与职位的关系。
    • 2.多对多关系:如学生与课程的关系。
    • 3.一对一关系:单表拆分为多个子表,子表之间就是一对一关系。

注意:如今物理外键在多表设计中已经不适用了,会导致死锁,消耗性能等问题,实际开发中使用逻辑外键代替物理外键。但是物理外键必须会。


  • 多表查询

    • 1.内连接查询:

      • 隐式内连接:select 字段列表 from 表1,表2 where 条件;

      • 显式内连接:select 字段列表 from 表1 [inner] join 表2 on 条件;

    • 2.外连接查询:

      • 左外连接:select 字段列表 from 表1 left [outer] join 表2 on 条件;

      • 右外连接:select 字段列表 from 表1 right [outer] join 表2 on 条件;

    • 3.子查询:

      • 子查询是嵌套在其他查询中的查询,被嵌套的查询称为子查询。
        子查询可以放在select、from、where、having等关键字后面。
        子查询的执行优先于主查询执行。
        子查询的执行结果可以作为主查询的条件,表,值。

      • 分类:

        • 标量子查询:子查询结果是单个值。

        • 列子查询:子查询结果是一列。

        • 行子查询:子查询结果是一行。

        • 表子查询:子查询结果是多行多列。

    • 4.连接查询的执行顺序:

      • from子句>where子句>group by子句>having子句>select子句>order by子句。


三、数据库事务

  • 定义

    • 1.事务是数据库一组操作的集合,这组操作要么全部成功,要么全部失败。
    • 2.事务具有4大特性:ACID。
  • 事务的四大特性

    • 1.原子性:事务是不可分割的最小操作单位,要么同时成功,要么同时失败。
    • 2.一致性:事务完成时,必须使所有的数据都保持一致状态。
    • 3.隔离性:多个事务之间,相互独立。
    • 4.持久性:事务一旦提交或回滚,它对数据库中的数据改变就是永久性的。

  • 事务操作

  • 开启事务:start transaction 或者 begin;

  • 提交:commit;

  • 回滚:rollback;


四、数据库优化之索引

  • 定义

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


  • 优缺点

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

    • 缺点:
      1.索引占用存储空间。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
      2.降低更新表的速度。如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次对表进行访问时,索引都要进行扫描,找到符合条件的数据。


  • 索引的默认数据结构

    • 1.B+树:多路平衡搜索树
      1.B+树是MySQL数据库索引的一种数据结构。


  • 索引操作

    • 1.创建索引:create index 索引名 on 表名(字段名);

    • 2.删除索引:drop index 索引名 on 表名;

    • 3.查看索引:show index from 表名;

1.主键字段在建表时自动创建主键索引。
2.唯一约束字段在建表时自动创建唯一索引。


posted @ 2024-06-26 12:55  crazybuddha  阅读(100)  评论(0编辑  收藏  举报