MySQL入门教程系列-1.1 数据库基础

数据库基础

共同编辑,修正错误,这里点击进去 mysql

数据库(Database,DB)是按照数据结构来组织、存储和管理数据的创建在计算机存储设备上的仓库。git

简单来讲是自己可视为电子化的文件柜——存储电子文件的处所,用户能够对文件中的数据进行新增、截取、更新、删除等操做。数据管理再也不仅仅是存储和管理数据,而转变成用户所须要的各类数据管理的方式。数据库有不少种类型,从最简单的存储有各类数据的表格到可以进行海量数据存储的大型数据库系统都在各个方面获得了普遍的应用。github

什么是数据库

人们一般用数据库这个术语来表明他们使用的数据库软件。这是不正确的,它是引发混淆的根源。确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库 是经过 DBMS 建立和操纵的容器。数据库能够是保存在硬设备 上的文件,但也能够不是。在很大程度上说,数据库到底是 文件仍是别的什么东西并不重要,由于你并不直接访问数据 库;你使用的是DBMS,它替你访问数据库。算法

数据库指的是以必定方式储存在一块儿、能为多个用户共享、具备尽量小的冗余度、与应用程序彼此独立的数据集合。简单来讲可视为电子化的文件柜——存储电子文件的处所,用户能够对文件中的数据运行新增、截取、更新、删除等操做。sql

数据库分类

数据库的可多了去了,在维基百科上面有下面这些数据库,并粗略的分了个类别。一看这里面的学问大了去了,仍是先搬一些表明性的吧,长长见识,要深刻了解各类概念推荐看《数据库系统概论》。数据库

关系数据库

(英语:Relational database),是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各类实体以及实体之间的各类联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现现在虽然对此模型有一些批评意见,但它仍是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操做。数组

  • MySQL
    • MariaDB(MySQL的代替品,英文维基百科从MySQL转向MariaDB)
    • Percona Server(MySQL的代替品)
  • PostgreSQL
  • Microsoft Access
  • Google Fusion Tables
  • SQL Server
  • FileMaker
  • Oracle
  • Sybase
  • dBASE
  • Clipper
  • FoxPro

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

非关系型数据库(NoSQL)

NoSQL一词最先出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。当代典型的关系数据库在一些数据敏感的应用中表现了糟糕的性能,例如为巨量文档建立索引、高流量网站的网页服务,以及发送流式媒体。关系型数据库的典型实现主要被调整用于执行规模小而读写频繁,或者大批量极少写访问的事务。架构

Key/value最终一致性存储

  • Apache Cassandra(为Facebook所使用):高度可扩展
  • Dynamo
  • Hibari
  • Project Voldemort
  • Riak

Key/value硬盘存储

  • LevelDB(Google)
  • BigTable
  • MemcacheDB
  • Tokyo Cabinet
  • Tuple space
  • TreapDB

Key/value RAM存储

  • Oracle Coherence
  • memcached
  • Citrusleaf database
  • Velocity
  • Redis
  • Tuple space

Key/value基于Paxos算法的存储

  • Keyspace

数据库模型

数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等)。数据库模型的分类以下:nosql

  • 对象模型
  • 层次模型(轻量级数据访问协议)
  • 网状模型(大型数据储存)
  • 关系模型
  • 面向对象模型
  • 半结构化模型
  • 平面模型(表格模型,通常在形式上是一个二维数组。如表格模型数据Excel)

架构

数据库的架构能够大体区分为三个归纳层次:内层、概念层和外层。

  • 内层:最接近实际存储体,亦即有关数据的实际存储方式。
  • 外层:最接近用户,即有关个别用户观看数据的方式。
  • 概念层:介于二者之间的间接层。

数据库索引

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

数据库操做:事物

事务(transaction)是用户定义的一个数据库操做序列,这些操做要么全作,要么全不作,是一个不可分区的工做单位。

数据表

关系数据库没有数据表,关键字、主键、索引等也就无从谈起,数据表是关系数据库中一个很是重要的对象,是其它对象的基础,也是一系列二维数组的集合,用来存储、操做数据的逻辑结构。根据信息的分类状况。一个数据库中可能包含若干个数据表,每张表是由行和列组成,记录一条数据数据表就增长一行,每一列是由字段名和字段数据集合组成,列被称之为字段,每一列还有本身的多个属性,例如是否容许为空、默认值、长度、类型、存储编码、注释等

数据类型

在定义数据字段的类型对你的数据库的优化很是重要,数据类型决定了数据在计算机中的存储格式,表明不一样的信息类型,大体能够分为:数值、日期/时间和字符串(字符)类型,字符串类型又包括二进制类型。

上图中每一列就是一个字段,每一个字段都有本身的类型,例如name列为字符串类型,level 列为数字类型。

关系键

关系键是关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另外一个表产生联系。一列(或一组列),其值可以惟一区分表中每一个行。

主键

主键(primary key或unique key),又称主码,数据库表中对储存数据对象予以惟一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

表中的任何列均可以做为主键,只要它知足如下条件:

  • 任意两行都不具备相同的主键值;
  • 每一个行都必须具备一个主键值(主键列不容许NULL值)。

除MySQL强制实施的规则外,应该坚持的 几个广泛承认的最好习惯为:

  • 不更新主键列中的值;
  • 不重用主键列的值;
  • 不在主键列中使用可能会更改的值。(例如,若是使用一个名字做为主键以标识某个供应商,当该供应商合并和更改其 名字时,必须更改这个主键。)

超键

超键(superkey),有的文献称“超码”,是在数据库关系模式设计中可以惟一标示多元组(即“行”)的属性集。包含全部属性的集叫作明显(平凡)超键。

候选键

在关系模型中,候选键或候选码(candidate key)是某个关系变量的一组属性所组成的集合,它须要同时知足下列两个条件:

  • 这个属性集合始终可以确保在关系中能惟一标识元组
  • 在这个属性集合中找不出真子集可以知足条件

知足第一个条件的属性集合称为超键,所以咱们也能够把候选键定义为“最小超键”,也就是不含有多余属性的超键。

候选键的重要性是它们可以在关系中惟一标识出不一样的元组,所以超键也是在设计数据库模式时须要指定的最重要的约束之一。因为在关系模型中,每一个关系都是一个集合(没有重复的元素),因此每一个关系都至少有一个候选键(由于全部属性组合必然是个超键)。可是在某些关系型数据库中表也能表明多重集,因此在每一个关系中都显式地定义至少一个候选键是一条很重要的设计原则。数据库管理系统一般都须要将每一个关系中的某个候选键定义为主键,亦即这个候选键是区分不一样元组时首选的识别方式,例如外键一般就是引用主键而非其余候选键。

外键

外键(foreign key,台湾译做外来键),又称外部键。其实在关系数据库中,每一个数据表都是由关系来连系彼此的关系,父数据表(Parent Entity)的主键(primary key)会放在另外一个数据表,当作属性以建立彼此的关系,而这个属性就是外键。

好比,学生跟老师之间是教学的关系,学生数据表会有个属性叫指导老师(FK),而这个值就是对应到老师数据表的老师代号(PK),学生的指导老师就是外键。

代理键

在关系型数据库设计中,代理键是在当数据表中的候选键都不适合当主键时,例如数据太长,或是意义层面太多,就会请一个无心义的但惟一的字段来代为做主键。

代理键是:

  • Surrogate (1) – Hall, Owlett and Codd (1976)
    一个代理键值肯定了外部世界的一个实体。代理键值是数据库生成的,历来不显示给用户或应用程序看。
  • Surrogate (2) – Wieringa and De Jonge (1991)
    一个代理键值肯定了数据库中的一个对象。代理键值是数据库生成的,用户或应用程序看不到它。

在实践中,代理键值一般是个自动递增的数字。在Sybase或SQL Server,用identity column标识代理键,PostgreSQL里用serial,Oracle里用SEQUENCE,在MySQL里用一个标记有AUTO_INCREMENT的字段。

天然键

天然键与代理键相反,它是在天然生活中惟一肯定一个事物的标识。身份证号就是一个天然键,用于肯定一我的。

相关文章
相关标签/搜索