当前位置:   article > 正文

数据库笔记_非关系型数据库为了高性能,高并发而生

非关系型数据库为了高性能,高并发而生

MySQL数据库初识

数据管理系统DBMS(database manage system),常见数据库管理系统,例如:mysql、oracle、db2等等。

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时.sql也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3.135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用

数据库分类

一、关系型数据库(RDBMS)
解释:关系型数据库模型是把复杂的数据结构归结为简单的二元关系(避免重复数据大量出现),如图:
在这里插入图片描述
常用的关系型数据库: oracle数据库,MySQL,MariaDB数据库 ,SQL Server数据库,Access数据库,DB2,PostgreSQL,Informix,Sybase。

二、非关系型数据库  
非关系型数据库也被成为NoSQL数据库“Not Olnly SQL” ,指的是非关系型数据库,并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。 随着互联网Web2.0网站的兴起,传统的关系型数据库在应付web2,0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经暴露了很多难以克服的问题。

NOSQL非关系型数据库
1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 ;
2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能;
3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库)

常见的非关系型数据库:

  1. memcached(key-value)

Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。   
1、key-value行数据库   
2、纯内存数据库
3、持久化memcachedb(sina)

  1. Redis(key-value)

redis是一个高性能的key-value数据库。redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。提供了Python、Ruby、Erlang、PHP客户端,使用方便。官方:http://www.redis.io/documentation
redis特点:
1)支持内存缓存,这个功能相当于memcached   
2)支持持久化存储,这个功能相当于memcachedb,ttserver
3)数据库类型更丰富。比其他key-value库功能更强   
4)支持主从集群、分布式   
5)支持队列等特殊功能
应用:缓存从存取memcached更改存取redis

  1. MongoDB(Document-oriented)

MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。他支持的数据库结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongodb最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
特点: 高性能、易部署、易使用、存储数据非常方便
1.面向集合存储,易存储对象类型的数据
2.“面向集合”(Collenction-Orented)意思是数据库被分组存储在数据集中,被称为一个集合(Collenction)每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档,集合的概念类似关系型数据库(RDBMS)里的表(table)不同的是它不需要定义任何模式(schema)
3.模式自由 :模式自由(schema-free)意为着存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。
4.支持动态查询
5.支持完全索引,包含内部对象
6.支持查询
7.支持复制和故障恢复
8.使用高效的二进制数据存储,包括大型对象
9.自动处理碎片、以支持云计算层次的扩展性

  1. Cassandra(Column-oriented)

Apache Cassndra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。
主要特点:
1.分布式
2.基于column的结构化
3.高伸展性
4.Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作。也会被路由到某个节点上面去读取。
Cassandir是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomie(分布式的key-value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目。

MySQL的库表详细操作

使用mysql数据库练习SQL语法。
首先安装mysql。使用navicat连接数据库。
自带数据库,mysql,information_schema,performance_schema,sakila,sys,world.

mysql:这个是mysql整个服务的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
root用户密码设置及忘记密码的解决方法

注意字符集编码:要求客服端,连接,结果与服务端数据编码一致。

看一下各个角色的编码(客户端、服务端,数据库等等)
SHOW VARIABLES LIKE "%char%";
  • 1
  • 2

在这里插入图片描述
character_set_server=utf8
collation-server=utf8_general_ci
总结:不乱码的思想:系统的编码、客户端、服务端、库、表、列,这几项的编码都要统一才不会出现乱码的情况。

SQL语句主要是针对数据库里面三个角色进行操作,对象是:库、表、行,操作包括:增删改查。

1. 库

(data文件夹中的文件夹,每创建一个库,这个库的名称就是文件夹的名称,文件夹里面保存着一些这个库相关的初始信息)
create database db1 charset utf8;#创建一个库,可以指定字符集  
show databases;#查看数据库中所有的库
show create database db1;#查看单独某个库db1的信息       
alter database db1 charset latin1;#修改库的字符集,注意语句的格式(其他语句也是这么个格式),alter(修改) database(修改数据库) db1(哪个数据库) charset(字符集) latin1(改成哪个字符集)       
删除:drop database db1;#删除数据库

2. 表

(表,操作文件,表是上面库文件夹里面的文件)
首先切换到库:use db1;#要操作表文件,要先切换到对应的库下才能操作表; 查看当前所在的是哪个库:select database();
create table t1(id int,name char(10) );#创建表的时候,和excel一样,需要有字段,每个字段还需要指定数据的格式,这里指定的是两个字段列,id和name列,id和name是列名(字段名),id 后面的int的意思说id这一列中的数据只能是int类型的,name后面的char的意思是,name这一列中的数据只能是char类型的(char表示定长字符串类型),char里面的10是说这个字段的长度最长为10个字符,如果不指定这个长度,默认长度是1个字符。
show tables;#查看当前库中所有的表 
show create table t1;#查看单表的创建信息
 desc t1;
 describe t1;#上下这两句是一样的结果
alter table t1 modify name char(3);#修改字段属性的,将name字段的char长度改为3,改完之后我们在用上面的show create table t1;desc t1;describe t1;来查看一下修改结果。alter table t1 change name name1 char(2);
drop table t1;

3. 行

(操作文件(表)中的内容/记录)
insert into t1 values(1,'dsb1'),(2,'dsb2'),(3,'dsb3');#往t1表中插入三行数据,注意你插入的每行内容都要和你创建表的时候的字段个数和字段属性对应好,注意每行数据以逗号分隔。nsert后面的into可以不用写。
select * from t1;#查看t1表中所有字段的数据,select 字段 from 表。
select id,name from t1;#查看t1表中的id和name列的数据,其他的不看,注意格式,每个字段逗号分隔,在cmd窗口下只是展示给我们看,将来我们通过程序获取查询数据的时候,就可以这么获取,查询字段的顺序也是可以颠倒的,name,id这样也是可以的。
update t1 set name='ssb' where id=2;#把id为2的行(记录)中的name字段的数据改为ssb;id>1;id<=1;等等都可以;update t1 set name='sb',id=88 where id>2;#对两个字段进行修改
update t1 set name='sb';#如果不指定where,那么会name字段的所有数据都被改成sb。
delete from t1 where id=1;#删除id为1的行
清空表delete from t1;#如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,
auto_increment 表示:自增
primary key 表示:约束(不能重复且不能为空);加速查找
至此!

在Navicat上练习:
在这里插入图片描述

MySQL行(记录)的详细操作

在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括:
a) 使用INSERT实现数据的插入;

INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(1,2,3…值n); #指定字段来插入数据,插入的值要和你前面的字段相匹配
INSERT INTO 表名 VALUES (1,2,3…值n); #不指定字段的话,就按照默认的几个字段来插入数据
INSERT INTO 表名 VALUES
        (1,2,3…值n),
        (1,2,3…值n),
        (1,2,3…值n);#插入多条记录用逗号来分隔
INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM2
                    WHERE; #将从表2里面查询出来的结果来插入到我们的表中,但是注意查询出来的数据要和我们前面指定的字段要对应好
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意将2表中查询出来的结果插入到1表中的写法。演示(insert into可以去掉into):

-- SHOW DATABASES;
USE news
> OK
> 时间: 0s

SHOW TABLES
> OK
> 时间: 0.023s

INSERT message(id,tittle,count) VALUES(1,'黑天鹅',34)
> Affected rows: 1
> 时间: 0.063s

INSERT message VALUES(2,'白天鹅',35)
> Affected rows: 1
> 时间: 0.15s

INSERT message(tittle,count) VALUES('犀牛',36)
> Affected rows: 1
> 时间: 0.049s

INSERT message(tittle,count) VALUES
							('白犀牛',37),
							('棕犀牛',38),
							('黑犀牛',39)
> Affected rows: 3
> 时间: 0.099s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
-- SHOW DATABASES;
USE news
> OK
> 时间: 0s

SHOW TABLES
> OK
> 时间: 0.001s

INSERT INTO message(id,tittle,count) VALUES(3,'黑天鹅',34)
> Affected rows: 1
> 时间: 0.057s

INSERT INTO message VALUES(4,'白天鹅',35)
> Affected rows: 1
> 时间: 0.119s

INSERT INTO message(tittle,count) VALUES('犀牛',36)
> Affected rows: 1
> 时间: 0.113s

INSERT INTO message(tittle,count) VALUES
							('白犀牛',37),
							('棕犀牛',38),
							('黑犀牛',39)
> Affected rows: 3
> 时间: 0.099s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

b) UPDATE实现数据的更新;
在这里插入图片描述
更新上表:

SHOW DATABASES;
USE news;
UPDATE message 
SET id = 0 
WHERE
	count > 36;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
c) 使用DELETE实现数据的删除;

USE news
> OK
> 时间: 0s

DELETE From message
WHERE id=1
> Affected rows: 1
> 时间: 0.069s

TRUNCATE old_message
> OK
> 时间: 1.261s
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述
TRUNCATE old_message执行后,old_message表里的数据被清空,不能回滚。慎用。

d) 使用SELECT查询数据以及。
单表查询:https://www.cnblogs.com/clschao/articles/9995531.html
多表查询:https://www.cnblogs.com/clschao/articles/9995815.html

权限表
在这里插入图片描述

#授权表
user #该表放行的权限,针对:所有数据,所有库下所有表,以及表下的所有字段
db #该表放行的权限,针对:某一数据库,该数据库下的所有表,以及表下的所有字段
tables_priv #该表放行的权限。针对:某一张表,以及该表下的所有字段
columns_priv #该表放行的权限,针对:某一个字段

#按图解释:
user:放行db1,db2及其包含的所有
db:放行db1,及其db1包含的所有
tables_priv:放行db1.table1,及其该表包含的所有
columns_prive:放行db1.table1.column1,只放行该字段
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
#创建用户
create user 'egon'@'1.1.1.1' identified by '123';
create user 'egon'@'192.168.1.%' identified by '123';
create user 'egon'@'%' identified by '123';


#授权:对文件夹,对文件,对文件某一字段的权限
查看帮助:help grant
常用权限有:select,update,alter,delete
all可以代表除了grant之外的所有权限

#针对所有库的授权:*.*
grant select on *.* to 'egon1'@'localhost' identified by '123'; #只在user表中可以查到egon1用户的select权限被设置为Y

#针对某一数据库:db1.*
grant select on db1.* to 'egon2'@'%' identified by '123'; #只在db表中可以查到egon2用户的select权限被设置为Y

#针对某一个表:db1.t1
grant select on db1.t1 to 'egon3'@'%' identified by '123';  #只在tables_priv表中可以查到egon3用户的select权限

#针对某一个字段:
mysql> select * from t3;
+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | egon1 |   18 |
|    2 | egon2 |   19 |
|    3 | egon3 |   29 |
+------+-------+------+

grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '123'; 
#可以在tables_priv和columns_priv中看到相应的权限
mysql> select * from tables_priv where user='egon4'\G
*************************** 1. row ***************************
       Host: localhost
         Db: db1
       User: egon4
 Table_name: t3
    Grantor: root@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv:
Column_priv: Select,Update
row in set (0.00 sec)

mysql> select * from columns_priv where user='egon4'\G
*************************** 1. row ***************************
       Host: localhost
         Db: db1
       User: egon4
 Table_name: t3
Column_name: id
  Timestamp: 0000-00-00 00:00:00
Column_priv: Select
*************************** 2. row ***************************
       Host: localhost
         Db: db1
       User: egon4
 Table_name: t3
Column_name: name
  Timestamp: 0000-00-00 00:00:00
Column_priv: Select
*************************** 3. row ***************************
       Host: localhost
         Db: db1
       User: egon4
 Table_name: t3
Column_name: age
  Timestamp: 0000-00-00 00:00:00
Column_priv: Update
rows in set (0.00 sec)

#删除权限
revoke select on db1.* from 'egon'@'%';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

注:本博客学习资料,参考文献来自:吴老师,感谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/639756
推荐阅读
相关标签
  

闽ICP备14008679号