数据库概述

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的资料执行新增、截取、更新、删除等操作。

所谓数据库是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成,底层。

数据库管理系统

数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的电脑类型来作分类,例如服务器聚类、移动电话;或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高执行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。

数据库的分类

随着数据库技术与其他分支学科技术的结合,出现了多种新型数据库,例如:与分布处理技术结合产生的分布式数据库、与并行处理技术结合产生的并行数据库、与人工智能结合产生的演绎数据库、与多媒体技术结合产生的多媒体数据库。另外,数据库技术应用于特定的领域,出现了工程数据库、 地理数据库、统计数据库、空间数据库等特定领域数据库。

关系数据库

关系型数据库是信息的集合,它以预定义的关系组织数据,数据存储在一个或多个由列和行构成的表(或“关系”)中,用户可以轻松查看和理解不同数据结构之间的关系。 关系是不同表之间的逻辑连接,根据这些表之间的交互建立。

  • MySQL

    • MariaDB(MySQL的代替品)

    • Percona Server(MySQL的代替品)

  • PostgreSQL

  • Microsoft Access

  • Microsoft SQL Server

  • Google Fusion Tables

  • FileMaker

  • Oracle数据库

  • Sybase

  • dBASE

  • Clipper

  • FoxPro

  • foshub

几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。

非关系型数据库(NoSQL)

Not only SQL,是对不同于传统的关系数据库的数据库管理系统的统称,其数据存储可以不需要固定的表格模式以及元数据(metadata),也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。

  • BigTable(Google)

  • Cassandra

  • MongoDB

  • CouchDB

  • Redis

    键值数据库

  • Apache Cassandra(为Facebook所使用):高度可扩展

  • Dynamo

  • LevelDB(Google)

数据库模型

  • 物件模型

  • 层次模型(轻量级数据访问协议)

  • 网状模型(大型数据储存)

    满足下面两个条件的基本层次联系的集合为网状模型。

    1. 允许一个以上的结点无双亲;
    2. 一个结点可以有多于一个的双亲。
  • 关系模型

  • 面向对象模型

  • 半结构化模型

  • 平面模型(表格模型,一般在形式上是一个二维阵列。如表格模型数据Excel)

架构 (Schema)

资料库的架构可以大致区分为三个概括层次:内层、概念层和外层。

  • 内层:最接近实际储存体,亦即有关资料的实际储存方式。
  • 外层:最接近使用者,即有关个别使用者观看资料的方式。
  • 概念层:介于两者之间的间接层。[9]

数据库索引

资料索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

另外,索引跟栏位有著相应的关系,索引即是由栏位而来,其中栏位有所谓的关键栏位(Key Field),该栏位具有唯一性,即其值不可重复,且不可为"空值null"。例如:在合并资料时,索引便是扮演欲附加栏位资料之指向性用途的角色。故此索引为不可重复性且不可为空。

数据库事务

事务(transaction)包含一组数据库操作的逻辑工作单元,在事务中包含的数据库操作是不可分割的整体,这些操作要么一起做,要么一起回滚(Roll Back)到执行前的状态。 事务的ACID特性:

  • 原子性(atomicity)

  • 一致性(consistency)

  • 隔离性(isolation)

  • 持续性(durability)

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会存取和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

SQL语法

  • DDL(Data Definition Language) 数据定义语言,用来定义数据库对象:数据库,表,列等。DDL就是用来操作数据库,表等;其语句包括动词CREATEDROP。在数据库中创建新表或删除表(CREAT TABLEDROP TABLE

    -- 查询所有的数据库
    SHOW DATABASES;
    -- 创建数据库
    CREATE DATABASE 数据库名称;
    -- 当存在对应名字的数据库,先删库再新建
    CREATE DATABASE IF NOT EXISTS 数据库名称;
    -- 使用数据库
    USE 数据库名称;
    SELECT DATABASE();
    -- 删除数据库
    DROP DATABASE 数据库名称;
    DROP DATABASE IF EXISTS 数据库名称;
    
  • DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改

    DML简单理解就是对表中数据进行增删改;其语句包括动词INSERTUPDATEDELETE

    -- 查询数据库表
    SHOW TABLES;
    -- 查看表结构
    DESC 表名称;
    -- 建表
    CREATE TABLE 表名 (
     字段名1 数据类型1,
     字段名2 数据类型2,
     
     字段名n 数据类型n
    );
    CREATE TABLE IF NOT EXITS 表名 (
     字段名1 数据类型1,
     字段名2 数据类型2,
     
     字段名n 数据类型n
    );
    -- 删表
    DROP TABLE 表名;
    DROP TABLE IF EXISTS 表名;
    -- 改表名
    ALTER TABLE 表名 RENAME TO 新的表名;
    -- 加字段
    ALTER TABLE 表名 ADD 列名 数据类型;
    -- 改字段类型
    ALTER TABLE 表名 MODIFY 列名 新数据类型;
    -- 修改字段名及字段类型
    ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
    -- 删字段
    ALTER TABLE 表名 DROP 列名;
    
  • DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据),动词:SELECT

    DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。

    -- 查询数据
    SELECT 字段列表 FROM 表名;
    SELECT * FROM 表名; 
    -- 查询对应字段并去重
    SELECT DISTINCT 字段列表 FROM 表名;
    -- 条件查询
    SELECT 字段列表 FROM 表名 WHERE 条件列表;
    -- 排序查询,ASC:升序排列(默认值)DESC:降序排列
    SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ;
    -- 分页查询,起始索引 = (当前页码 - 1) * 每页显示的条数
    SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
    -- 聚合函数
    SELECT 聚合函数名(列名) FROM ;
    -- 分组查询
    SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
    -- 拼表查询,得到的结果是笛卡尔积,比如表1数据为a,b,表2数据为1,2,3,则积为{a,1},{a,2},{a,3},{b,1},{b,2},{b,3}
    SELECT * FROM 表名1, 表名2;
    -- 隐式内连接
    SELECT 字段列表 FROM 1,2 WHERE 条件;
    -- 显示内连接,多表查询的时候join更优where
    SELECT 字段列表 FROM 1 [INNER] JOIN 2 ON 条件;
    -- 左外连接 
    SELECT 字段列表 FROM 1 LEFT [OUTER] JOIN 2 ON 条件;
    -- 右外连接
    SELECT 字段列表 FROM 1 RIGHT [OUTER] JOIN 2 ON 条件;
    

    ![SQL JOINS](/SQL JOINS.jpg)

  • DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户;

    DCL简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。

    以及其他的一些CCL(指针控制语言),TPL(事务处理语言)等

    -- 给指定列添加数据
    INSERT INTO 表名(列名1,列名2,) VALUES(1,2,);
    -- 给全部列添加数据
    INSERT INTO 表名 VALUES(1,2,);
    -- 批量添加数据
    INSERT INTO 表名(列名1,列名2,) VALUES(1,2,),(1,2,),(1,2,);
    INSERT INTO 表名 VALUES(1,2,),(1,2,),(1,2,);
    -- 修改表数据
    UPDATE 表名 SET 列名1=1,列名2=2, [WHERE 条件];
    -- 删除数据
    DELETE FROM 表名 [WHERE 条件];
    

SQL 函数

  • 聚合函数

    聚集/聚合函数作用于一组数据,并对一组数据返回一个值,聚集函数会忽略NULL值;

    COUNT:统计结果记录数,如果列的值为NULL,不会计算在内的,即会忽略NULL值

    MAX: 统计计算最大值

    MIN: 统计计算最小值

    SUM: 统计计算求和

    AVG: 统计计算平均值,如果列的值为NULL,不会计算在内的,即会忽略NULL值

  • 类型转化函数

    CAST(value AS type), CONVERT(value, type) :用来获取一个类型的值,并产生另一个类型

    的值;

    可装换的数据类型

    1. 二进制,同带binary前缀的效果 : BINARY
    2. 字符型,可带参数 : CHAR()
    3. 日期 : DATE
    4. 时间: TIME(5)
    5. 日期时间型 : DATETIME
    6. 浮点数 : DECIMAL
    7. 整数 : SIGNED
    8. 无符号整数 : UNSIGNED
  • 字符串函数

    LENGTH(s):返回字符串s的长度(字节数)

    CONCAT(s1,s2,...):将字符串s1,s2等多个字符串合并为一个字符串。如果有任何参数为null

    ,则函数返回null。如果参数是数字,则自动转换为字符串。

    UPPER(s):将字符串s的所有字母变成大写字母

    LOWER(s):将字符串s的所有字母变成小写字母

    TRIM(s):去掉字符串s开始和结尾处的空格

  • 日期函数

    CURDATE(),CURRENT_DATE(),CURRENT_DATE:返回当前日期

    CURTIME(),CURRENT_TIME(),CURRENT_TIME:返回当前时间

    NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP():返回当

    前日期和时间

    YEAR(d):接受date参数,并返回日期的年份

  • 控制流程函数

    IF(test,arg1,arg2) :如果test是真,返回t;否则返回f

    IFNULL(arg1,arg2):如果arg1不是空,返回arg1,否则返回arg2