Skip to content

Commit

Permalink
数据库基础更新
Browse files Browse the repository at this point in the history
  • Loading branch information
jaywcjlove committed Sep 25, 2016
1 parent df5c220 commit 0514bd5
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 15 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,15 @@ MySQL入门教程
#### 第1章 初识MySQL

- 1.1 [数据库基础](chapter1/1.1.md)
- 什么是数据库
- 数据库分类
- 数据库模型
- 数据表
- 关系键
- 1.2 [数据库技术构成](chapter1/1.2.md)
- 数据库系统
- SQL语言
- 数据库访问技术
- 1.3 [什么是MySQL](chapter1/1.3.md)
- MySQL介绍
- 历史事件
Expand All @@ -37,8 +45,11 @@ MySQL入门教程

#### 第3章 数据库的基本操作


#### 第4章 数据表的基本操作

- 3.1 创建数据表

#### 第5章 数据类型和运算符

#### 第6章 MySQL函数
Expand Down
1 change: 1 addition & 0 deletions awesome-mysql.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ _MySQL服务器的味道_
* MySQL官网:http://www.mysql.com/
* MySQL开发者主页:http://dev.mysql.com/
* MySQL社区:http://www.mysqlpub.com/
* [What is MySQL?](http://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.html)


**[⬆ 返回顶部](#目录)**
Expand Down
68 changes: 53 additions & 15 deletions chapter1/1.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
数据库基础
---

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

简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

Expand All @@ -12,7 +12,7 @@

## 数据库分类

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

### 关系数据库

Expand Down Expand Up @@ -70,6 +70,8 @@ _NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开

## 数据库模型

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

- 对象模型
- 层次模型(轻量级数据访问协议)
- 网状模型(大型数据储存)
Expand All @@ -90,28 +92,64 @@ _数据库的架构可以大致区分为三个概括层次:内层、概念层

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

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

### 数据库操作:事物

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

## 数据表

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

![MySQL](../img/data.jpg)

**数据类型**

在定义数据字段的类型对你的数据库的优化非常重要,数据类型决定了数据在计算机中的存储格式,代表不同的信息类型,大致可以分为:数值、日期/时间和字符串(字符)类型,字符串类型又包括二进制类型。

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

## 关系键

_关系键是关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。_

### 主键

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

### 超键

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

### 候选键

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

1. 这个属性集合始终能够确保在关系中能唯一标识元组
2. 在这个属性集合中找不出真子集能够满足条件(1)

满足第一个条件的属性集合称为超键,因此我们也可以把候选键定义为“最小超键”,也就是不含有多余属性的超键。

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

- 基元性(atomicity)
- 一致性(consistency)
- 隔离性(isolation)
- 持续性(durability)
### 外键

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性
外键(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的字段。

# 参考资料
### 自然键

- [What is MySQL?](http://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.html)
自然键与代理键相反,它是在自然生活中唯一确定一个事物的标识。身份证号就是一个自然键,用于确定一个人。
17 changes: 17 additions & 0 deletions examples/create-table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-- NOT NULL 不能为空
-- unsigned 是指数值类型只能为正数。
-- DEFAULT 默认值

CREATE TABLE `user_accounts` (
`id` int(100) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL DEFAULT '' COMMENT '姓名',
`sex` tinyint(32) NOT NULL DEFAULT 0 COMMENT '性别:0,保密;1,男;2,女',
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机',
`create_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`update_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
-- 创建唯一索引,不允许重复
UNIQUE INDEX idx_user_mobile(`mobile`),
PRIMARY KEY (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8
COMMENT='用户表信息';

0 comments on commit 0514bd5

Please sign in to comment.