客户端、数据库以及数据库管理系统的关系
关系型数据库
采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
关系模型中的常用概念
1 | 关系:一张二维表,每个关系都具有一个关系名,也就是表名 |
优点
不足
常见的关系型数据库
1 | MySQL: 开源免费的数据库,小型的数据库。已经被Oracle收购了,MySQL6.x版本也开始收费。 |
非关系型数据库
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
优点
用户可以根据需要去添加自己需要的字段,为了获取用户的不同信息,不像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。
适用于SNS(Social Networking Services)中,例如 facebook,微博。系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库难以应付,需要新的结构化数据存储。由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
不足
数据库结构
数据库中以表为组织单位存储数据,称为数据库表。
数据库表由:表名、表字段、表记录构成。
主键
概念:主关键字,primary key
,是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。通过主键,可以标识表中的唯一字段。
外键
概念:外键,foreign key
,即为对于两个表中的公共属性,这个公共属性在其中一个表中是主键,另个一个表中的普通属性,则在这个表中的普通属性,称之为外键。
唯一索引
概念:唯一索引,一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。
与主键的区别与联系:
1 | 主键创建后一定包含唯一索引,但是唯一索引不一定是主键。 |
单索引
概念:为单个字段创建的索引,即为单索引。
单索引可以加快该字段的检索速度,但是与唯一索引不同的是,单索引并不限制,索引不能重复。
组合索引
概念:两个或更多个列上的索引被称作复合索引。利用索引中的附加列,可以缩小搜索的范围。
单索引与组合索引的区别(示例)
1 | 对于一个用户表(包含用户id、用户名、地址、年龄、密码),现在要查询某一地区的特定年龄的用户,如要查询“北京”地区年龄为25的所用用户。 |
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL是一种所有关系型数据库的查询规范,通用的数据库操作语言,所有的数据库都支持。不同的数据库 SQL 语句有一些区别。
数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
数据操作语言(DML:Data Manipulation Language):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独立的操作。
数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
每条语句以分号结尾。
SQL 中关键字不区分大小写
注释方法
1 | -- 单行注释 |
约束用于限制加入表的数据的类型,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。
主键约束
主键约束的限制是非空和不重复。通常会给每张表设计一个 id 的字段,把 id 作为主键,并且实际在数据表中一般是自增的。
唯一约束
唯一约束的限制是不重复。
非空约束
非空约束的限制是非空,即数据库表中的字段的值,不能为null。
default默认值约束
如果插入数据时,该字段没有赋值,则为默认值。
外键约束
一张表有一个外键,那么这张表的某个字段将受限于另外一张表的某个字段对应的值,称为外键约束。外键约束要设置级联操作,在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作。级联操作分为二种:级联更新、级联删除。
检查约束
检查约束指定某列中的值必须满足布尔表达式,根据用户自己的需求来进行限制。比如电话号码字段phone
可以设置检查约束length(phone)=11
,不满足该布尔表达式的数据不允许添加。