1. SQL---数据库基本概念简介

1. 什么是数据库以及为什么需要数据库?

  通常所说的数据库有两种含义,一是指实际存储数据的仓库,二是指抽象层面上容纳一组表的那个database,我们这里所讲的数据库属于后一种,最常用的数据库是关系型数据库。
  我们与计算机的交互本质上是对数据的增删改查,数据库就提供了这些功能。它可以实现对数据的定义、插入、更新、删除、查询等操作,提供了工程师与数据交互的窗口。
主流的关系数据库主要分为以下几类:

  1. 商用数据库,例如:Oracle,SQL Server,DB2等;
  2. 开源数据库,例如:MySQL,PostgreSQL等;
  3. 桌面数据库,以微软Access为代表,适合桌面应用程序使用;
  4. 嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。

2. 什么是SQL以及为什么学习SQL?

  SQL是结构化查询语言(Structured Query Language)的缩写,用来访问和操作数据库系统的标准语言。SQL语句既可以查询数据库中的数据,也可以添加、更新和删除数据库中的数据,还可以对数据库进行管理和维护操作。
  不同的数据库,虽然多多少少都对SQL进行了扩展,但是标准的SQL核心功能是通用的,这样我们通过学习SQL这一种语言,就可以操作各种不同的数据库。
SQL语言定义了几种操作数据库的能力:

  1. DDL:Data Definition Language
    DDL允许用户定义数据,也就是创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行。
  2. DML:Data Manipulation Language
    DML为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。
  3. DQL:Data Query Language
    DQL允许用户查询数据,这也是通常最频繁的数据库日常操作。

3. 基本概念

3.1 表

  关系型数据库建立在关系模型上,关系模型的本质是若干个存储数据的二维表,我们可以将其视为EXCEL表格。
  表是数据存储的直接载体,数据库基本上都是通过表来组织数据的。所以是我们查询并获取数据最直接的对象。
表的几个特征:

  1. 表的每一行称为一个记录(record),记录一个逻辑意义上的数据。
  2. 表的每一列称为一个字段(Column),同一个表每一行都有相同的若干字段。
  3. 每一个记录,包含若干个字段,同一个表所有记录有相同的字段。
  4. 行列交叉唯一确定一个单元格。
  5. 表中列名不能重复,即列名需唯一。
  6. 表中每一列只能存储同一类型数据。

3.2 数据类型

  不同数据库管理系统支持类型有些许差异,以MySQL为例,常用数据类型如下:

  1. 数值类型

    数值类型中,BIGINT能基本满足整数存储需求,最常用。
  2. 日期类型
  3. 字符串类型

    VARCHAR(N)能满足字符串存储的需求,最为常用。

3.3 主键

  对于关系表,有个很重要的约束:任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。
  主键最关键要求:

  1. 一旦插入表中,主键最好不要修改,用于唯一定位记录。
  2. 与业务无关,可以选择自增类型或者全局唯一GUID类型。
  3. 主键不允许为NULL。

  主键可以是一列(如下图1)也可以是多列(如下图2),目的就是为了唯一区分定位记录。多列主键称为联合主键。联合主键允许一列重复,只要所有主键列不重复即可。

图1 单列主键

图2 联合主键

3.4 表关系和外键

表和表之间的关系通常有三种,一对一、一对多、多对多:

  1. 一对一:指表A和表B通过某字段关联后,表A中的一条记录最多对应表B中的一条记录,表B中的一条记录也最多对应表A中的一条记录。
  2. 一对多:指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录最多对应表A中的一条记录。
  3. 多对多:指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录可能对应表A中的多条记录。

  一对一和一对多关系,通常使用外键引用对应表的主键就可以表达。而多对多关系,通常需要使用中间表来表达,中间表中记录了两张表的主键的对应关系。
  因此,外键通常用来建立两张表之间的关联关系。如下图两个表
students表:

在这里插入图片描述
classes表:
在这里插入图片描述

  想要找到学生与班级的对应关系,相当于classes对students是一对多,使用外键class_id关联两个表:
在这里插入图片描述

注意:

  1. 外键不是通过列名实现的,而是通过定义外键约束。
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);
  1. 删除外键约束。
ALTER TABLE students
DROP FOREIGN KEY fk_class_id;
  1. 外键约束一般会有性能问题,所以一般不会设置外键约束,而是将class_id作为普通列,起到外键作用。

3.5 索引

  对于数据库中的表来说,索引就相当于是表的目录,是关系数据库中对某一列或多个列的值进行预排序的数据结构,其存在的主要目的就是为了加快查询速度。
  索引的效率取决于索引列的值是否散列,该列值越不同效率越高。对于主键,关系数据库会自动对其创建主键索引,因为主键会保证绝对唯一,所以使用主键索引的效率是最高的

  1. 创建索引
ALTER TABLE students
ADD INDEX idx_score (score);
  1. 创建唯一索引
    唯一索引可以约束列中元素不能相同,保证唯一性。
ALTER TABLE students
ADD INDEX idx_name_score (name, score);
  1. 使用唯一约束
    添加唯一约束,也可以保证唯一性。
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);

3.6 视图

  视图就是一张虚拟的表,但是注意,视图存储的是SQL语句,而不是SQL执行后的结果
  视图主要解决经常用到的SQL日常查询,可以保存为视图,方便下次直接读取使用。

3.7 集合

  集合表示数据库中记录的集合,表、视图和查询的执行结果都是记录的集合。可以做交集,并集,差集。
  查询的执行结果也是集合,那么就可以把查询的结果再当做一个表,继续基于这个表做分析。这个便是子查询的理论基础。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值