本文目录:
- 1.关系型数据库
- 2.什么是非关系型数据库
- 3.NoSQL常见场景
- 4.MySQL常用命令
1.关系型数据库
是指采用了关系模型来组织数据的数据库
所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
关系型数据可以很好地存储一些关系模型的数据,比如一个老师对应多个学生的数据(“多对多”),一本书对应多个作者(“一对多”),一本书对应一个出版日期(“一对一”)
常见的关系型数据库:
Oracle、DB2、MySQL
关系型数据库的特点:
安全(因为存储在磁盘中,不会说突然断电数据就没有了)、
容易理解(建立在关系模型上)
但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)
2.什么是非关系型数据库
非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)
非关系型模型比如有:
- 列模型:存储的数据是一列列的。关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录。(这种模型,数据即索引,IO很快,主要是一些分布式数据库)
- 键值对模型:存储的数据是一个个“键值对”,比如name:liming,那么name这个键里面存的值就是liming
- 文档类模型:以一个个文档来存储数据,有点类似“键值对”。
NoSQL是对不同于传统的关系数据库的数据库管理系统的统称
常见非关系模型数据库:
列模型:Hbase
键值对模型:redis,MemcacheDB
文档类模型:mongoDB
非关系型数据库的特点:
效率高(因为存储在内存中)、
但不安全(断电丢失数据,但其中redis可以同步数据到磁盘中),现在很多非关系型数据库都开始支持转存到磁盘中。
3.NoSQL常见场景
1.内嵌
内嵌是指存在关联关系的的文档,放在同一文档中,以数组的形式存放。
{
"username": "brian",
"gender": 0,
"roles": ["admin", "user"],
"address": [
"address1",
"address2"
]
}
内嵌设计,减少了关联查询,适合于单类需要描述的属性和不经常变化的属性
2.父/子引用
父引用时指存在一对多的情况中,放在同一文档中,以数组的形式存放
{
"tid": "postID",
"titile": "文章标题",
"catalog": "index",
"created": "1436731249",
"comments": [
"commentID1",
"commentID2"
]
}
子引用是指存在一对非常多的情况中,由于数据库文档存放限制,这个时候进行反向引用
{
"cid": "commentID",
"tid": "postID",
"comment": "这是回复的内容,不错!!",
"created": "1436731249",
"isRead": 0,
"isBest": 0,
"status": 1,
}
一对非常多的时候,为什么要使用到子引用?无限增多的数据不能存放到数组中。
3.反范式
范式是指按既定的用法,范式就是一种公认的模型或模式。反范式就是不走寻常套路的用法
{
"tid": "postID",
"titile": "文章标题",
"created": "1436731249",
"users": [{
"uid": "用户ID",
"name": "用户昵称",
"isVip": "1"
}]
}
设计原则小结:
优先考虑内嵌,如果单独访问,则不适合
数组不应该无限制的增长
考虑读写比,考虑反范式,考虑应用场景
4.MySQL常用命令
MySQL官网:https://www.mysql.com/
登陆和退出
mysql -uroot -p
exit 或者 \q
_查看数据库
SHOW DATABASES;
创建数据库
CREATE DATABASE 数据库名 charset utf8
选择数据库
USE 数据库名
删除数据库
DROP DATABASE [IF EXISTS] db_name
查看数据表
SHOW TABLES
创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
)
实际操作数据库会使用可视化工具,方便快捷,个人使用的是Navicat Premium。
常见的数据类型
数据类型有很多种,因为和数据库打交道不是很多,所以这里只列举几个最常用的类型,其它使用的时候再查阅文档。
1.(数字类型)INT 正常大小的整数,可以有符号,也可以没有符号。如果是有符号整数,其允许的取值范围是-2147483648~2147483647;无符号整数的取值范围是从0至4294967295。最高可指定11位数字。
2.(数字类型)FLOAT(M,D) 不带符号的浮点数。M 代表显示长度,D 代表小数位数。这两个参数都不是必需参数,它们默认为10, 2,表示小数点后有2位数字,而整个数字的位数为10(包含小数位数)。FLOAT 类型的小数精度可以达到24位。
3.(时间类型)DATE YYYY-MM-DD (年-月-日)格式显示的日期,取值范围从1000-01-01 到 9999-12-31。比如1973年的12月30日就存为 1973-12-30。
4.(字符串类型)CHAR(M) 长度固定的字符串,长度范围从1~255个字符,比如CHAR(5)。在存储时,会向右用空格补齐指定长度。长度并非必须参数,默认长度为1。
5.(字符串类型)VARCHAR(M) 长度不定的字符串,长度范围从1~255个字符。比如:CHAR(25)。在创建VARCHAR字段时,必须定义长度。
基本CURD
查询数据
查询一张表中的所有数据
SELECT * FROM 表名
查询表中的某个字段
SELECT 列名 FROM 表名
查询符合条件的数据
SELECT * FROM 表名 WHERE 列名 = 列值
插入数据(一个完整的行)
INSERT INTO 表名 VALUES (列值1, 列值2, 列值3, ...)
插入数据(插入多个完整的行)
INSERT INTO 表名 (列名1, 列名2, 列名3, ...) VALUES (列值1, 列值2, 列值3, ...), (列值1, 列值2, 列值3, ...), ...
修改一条数据
UPDATE 表名 SET 列名 = 新值 WHERE 列名=给定列值
UPDATE user SET name = 'zhangsan' WHERE id=2
删除一条数据
DELETE FROM 表名 列名=给定列值
DELETE FROM user WHERE id=3
//使用DELETE语句需要特别注意,如果省略了WHERE子句,将删除表中所有行