基础知识

数据库抽象

  • 物理层:最低层次,详细描述复杂的底层数据结构
  • 逻辑层:描述数据库存储什么数据以及这些数据间的关系
  • 视图层:只描述整个数据库的某个部分

数据库模式

  • 物理模式
  • 逻辑模式:具有物理数据独立性
  • 子模式

数据模型

  • 关系模型:用表的集合来啊表示数据与数据之间的联系。每个表有多个列,每列有唯一列名。每个表包含某种特定类型的记录,表的列对应于记录类型的属性。
  • 实体-联系模型(ER):基于对现实世界的认识——现实世界由一组称为实体的基本对象以及这些对象间的联系构成。
  • 基于对象的数据模型
  • 半结构化数据模型

基本元素

  • 表:每个表有多个列,每个列有唯一名字
  • 事务:数据库应用中完成单一逻辑功能的操作集合。
  • 超码:一个或多个属性的集合,这些属性的组合可以是我们在一个关系中唯一地标识一个元组。例如ID可以区分不同教师,而name则可能存在重复。
  • 主码:代表被设计者选中的、主要用来在一个关系中区分不同元组的候选码。码,是整个关系的一种性质,不是单个元组的性质。关系中的任意两个不同元组都不允许同时在码属性上具有相同的值。
  • 外码:一个关系模式r1可能在它的属性中包括另一个关系模式r2的主码。这个属性在r1上乘坐参照r2的外码。关系r1也称为外码以来的参照关系。

存储引擎

  • 查看实例支持的存储引擎 / 窗口mysql当前默认的存储引擎

          
    show engines; / show variables like '%storage_engine%';
    
  • 设置默认引擎

    
    set default_storage_engine = MyISAM;
    
  • 存储引擎类型:

    • MyISAM

      • 具有检查和修复表的大多数工具
      • MyISAM表可以被压缩
      • 最早支持全文索引
      • 不支持事务
      • 不支持外键(Foreign Key)
      • 如果需要执行大量的select语句,面向OLAP应用,出于性能方面的考虑,MyISAM是更好的选择
      • 联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。
    • InnoDB

      • 支持外键
      • 支持事务:如果某张表主要提供OLTP支持,需要执行大量的增删改操作,出于事务安全方面的考虑,InnoDB是更好的选择
      • 最新版的MySQL已经开始支持全文索引,若需要执行大量的更新操作,面向OLTP应用,出于事务安全考虑,这个更好。
      • OLTP:联机事务处理系统是一种以事务元作为数据处理的单位、人机交互的计算机应用系统。它能对数据进行即时更新或其他操作,系统内的数据总是保持在最新状态。OLTP数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。

常用命令

启动与连接

net start mysql
net stop mysql
(以上都要切换到MySQL路径)
mysql -u root -p(root账号,无密码,登录服务器)

基础操作

select version();   查看服务器版本
show databases;   查看当前所有的数据库
use xxx;   打开指定的库
show tables;    查看当前库所有的表
show tables from xxx;   查看其它库的所有表
select xxx();   查看当前库
create table xxx(
    xx 变量类型
    ...
);    创建表
desc xxx;   查看表结构
select * from xxx;
insert into xxx (xxx,xxx,...) value(d,d,...);   插入信息
alter database xxx character set xxx;设置字符集
show character set;显示字符集

复制表

    create table 新表名
    like 源表     //复制源表结构
    create table 新表名 select * from //复制源表结构以及记录

修改表结构

    alter table 表名 drop 字段名    //删除字段
    alter table 表名 add 新字段名 数据类型 [约束条件] [first|after 旧字段名]

修改字段名(或数据类型)

    alter table 表名 change 旧字段名 新字段名 数据类型
    alter table 表名 modify 字段名 数据类型

修改约束条件

    alter table 表名 add constraint 约束名 约束类型 (字段名)//添加约束条件
    alter table 表名 drop primary key //删除约束条件
    alter table 表名 drop foreign key 约束名
    alter table 表名 drop index 唯一索引名

修改表名

    rename table 旧表名 to 新表名

表记录的修改

    update 表名;
    set 字段名1 = 值1,字段名2 = 值2;
    [where条件表达式]

使用replace插入新记录

    replace into 表名[(字段列表)] values
    replace [into] 目标表名[(字段列表1)]
    select (字段列表2) from 源表 where条件表达式
    

表记录的检索

select语句语法格式:
select 字段列表
from 数据源
[where 条件表达式]    #用于指定记录的过滤条件
[group by 分组字段 [having 条件表达式]]  #用于对检索的数据进行分组
[order by 排序字段 [asc | desc]]     #用于对检索的数据进行排序处理,默认为升序asc;NULL当作最小值处理
select子句指定字段列表

字段列表跟在select后,用于指定查询结果集中需要显示的列。

  • *:字段列表为数据源的全部字段
  • 表名.*: 多表查询时,指定某个表的全部字段
  • 字段列表:指定需要显示的若干个字段

1.字段列表可以包含字段名,也可以用包含表达式,字段名之间使用逗号分隔,且顺序可根据需要任意指定

2.可以为字段列表中的字段名或表达式指定别名,中间使用as关键字分隔(可省略)

3.多表查询时,同字段前必须添加表名前缀,中间使用"."分隔

谓词过滤记录
  • distinct:过滤结果集中重复的记录

    select distinct department_name from classes;

  • limit:使用select语句时,经常需要返回前几条或者中间某几条记录,,可以使用limit实现

    select 字段列表
    from 数据源
    limit [start,] length;

    0,3代表前三条,1,3代表从第二条到第三条

使用from子句指定数据源

    from 表名1 [连接类型] join 表名2 on 表1和表2之间的连接条件
  • 内连接(inner):默认的连接类型,将两个表中满足指定连接条件的记录连接成新的结果集,舍弃所有不满足连接条件的记录。
  • 外连接(outer):外连接分为左连接(left join)右连接(right join)和完全连接(full join)。左/右连接的连接条件只过滤一个表,对另一个表不进行过滤。MySQL暂不支持full join

多表连接

    from 表1 [连接类型] join 表2 on 表1和表2之间的连接条件
    [连接类型] join 表3 on 表2和表3之间的连接条件

like模糊查询

    字符串表达式 [not] like 模式
    例如: select * from student where student_name like '%三%'

模式是一个字符串,其中包含普通字符和通配符。“%”表示匹配零个或多个字符组成的任意字符串,“_”表示匹配任意一个字符。

使用聚合函数汇总结果集

  • count()
  • sum()
  • avg()
  • max()/min()

group by 子句

  • having:该子句用于设置分组或聚合函数的过滤筛选条件,通常与group by一起使用。

    having 条件表达式

    >条件表达式是一个逻辑表达式,用于指定分组后的筛选条件,having不能被替换成where
    
    

语法规范

1.每条命令后分号结尾;
2.不区分大小写,但是关键字大写,表名,列名小写。
3.根据需要换行,建议关键字换行。
4.注释
      单行注释:#注释文字
      单行注释:-- 注释文字(有空格)
      多行注释:/* 注释文字 */
Last modification:July 20th, 2020 at 08:37 am
请随意~