数据库基础知识

视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)。

常用数据库列表

数据库列表

列出平时见过的一些数据库

gemfire

Gemfire作为内存数据库

JPA

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中

Mongodb

Neo4j

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注

Rest

mysql 密码重置

linux
停止mysql服务

service mysqld stop

启动mysqld_safe ,跳过启动授权表。启动时加上skip-grant-tables参数目的是在启动mysql时不启动grant-tables,授权表。这样就可以修改root的密码了。

mysqld_safe –skip-grant-tables &

登录mysql,并修改密码:

mysql -uroot -p —-要求输入密码时,直接回车即可。

use mysql;
update user set password=PASSWORD(‘12345678’) where user=”root”; —将root密码设置为12345678
flush privileges;
quit

杀死mysqld_safe进程,并重启mysqld。

kill -9 11283 (11283为mysqld_safe进程)

service mysqld start

mysql -uroot -p (输入密码12345678即可)

windows
1、首先停止正在运行的MySQL进程
复制代码 代码如下:

net stop mysql

如未加载为服务,可直接在进程管理器或者服务中进行关闭。

2、以安全模式启动MySQL
进入mysql目录在命令行下运行
复制代码 代码如下:

d:
cd xampp/mysql/bin
mysqld.exe –skip-grant-tables

3、完成以后就可以不用密码进入MySQL了
复制代码 代码如下:

mysql -u root -p

提示输入密码时直接回车即可。

4、更改密码
复制代码 代码如下:

use mysql
update user set Password=password(‘新密码’) where User=’root’;
flush privileges;

5、启动MySQL服务
在任务管理器里关闭所有MySQL的进程,使用下面的命令启动。
复制代码 代码如下:

net start mysql

MongoDB

MongoDB以BSON格式的文档(Documents)形式存储。Databases中包含集合(Collections),集合(Collections)中存储文档(Documents)。

BSON是一个二进制形式的JSON文档,它比JSON包含更多的数据类型。对于BSON规格,可参见bsonspec.org,也可参考BSON类型。

Databases

在MongoDB中,databases保存文档(Documents)的集合(Collections)。

在Mongo Shell中,通过使用use 命令来选中database,就像下面的例子:

use myDB
创建Database

如果database不存在,MongoDB会在第一次为database存储数据的时候创建。因此,你可以直接切换到一个不存在的数据库,然后执行下面的语句:

use myNewDB

db.myNewCollection1.insert( { x: 1 } )
insert()操作会创建名为myNewDB的database和名为myNewCollection1的collection(如果他们不存在的话)。

Collections

MongoDB在collections中存储文档(documents)。Collections类似于关系型数据库中的表(tables)。

创建Collection

如果collection不存在,MongoDB会在第一次为collection存储数据的时候创建。

db.myNewCollection2.insert( { x: 1 } )
db.myNewCollection3.createIndex( { y: 1 } )
无论是insert()还是createIndex()操作,都会创建它们各自指定的收集,如果他们不存在的话。

显式创建

MongoDB提供db.createCollection()方法来显式创建一个collection,同时还能设置各种选项,例如:设置最大尺寸和文档校验规则。如果你没有指定这些选项,那么你就不需要显式创建collection,因为MongoDB会在你创建第一个数据的时候自动创建collection。

若要修改这些collection选择,可查看collMod。

Documents校验

3.2.x版本新增内容。

默认情况下,collection不要求文档有相同的结构;例如,在一个collection的文档不必具有相同的fields,对于单个field在一个collection中的不同文档中可以是不同的数据类型。

从MongoDB 3.2开始,你可以在对collection进行update和insert操作的时候执行文档(documents)校验规则。具体可参见文档验证的详细信息。

Documents

Document结构

MongoDB的文件是由field和value对的结构组成,例如下面这样的结构:

{
field1: value1,
field2: value2,
field3: value3,

fieldN: valueN
}
value值可以是任何BSON数据类型,包括:其他document,数字,和document数组。

例如下面的document,包含各种不同类型的值:

var mydoc = {
_id: ObjectId(“5099803df3f4948bd2f98391”),
name: {
first: “Alan”, last: “Turing”
},
birth: new Date(‘Jun 23, 1912’),
death: new Date(‘Jun 07, 1954’),
contribs: [ “Turing machine”, “Turing test”, “Turingery” ],
views : NumberLong(1250000)
}
上面例子中的各fields有下列数据类型:

_id:ObjectId类型
name:一个嵌入的document,包含first和last字段
birth和death:Date类型
contribs:字符串数组
views:NumberLong类型
Field名

Field名是一个字符串。

Documents中的filed名有下列限制:

_id被保留用于主键;其值必须是集合中唯一的、不可变的、并且可以是数组以外的任何数据类型
不能以美元符号$开头
不能包含点字符.
不能包含空字符
Field Value限制

对于索引的collections,索引字段中的值有最大长度限制。详情请参见Maximum Index Key Length。

圆点符号

MongoDB中使用圆点符号.访问数组中的元素,也可以访问嵌入式Documents的fields。

Arrays数组

通过圆点符号.来链接Arrays数组名字和从0开始的数字位置,来定位和访问一个元素数组:

.
举例:对于下面的document:

{

contribs: [ “Turing machine”, “Turing test”, “Turingery” ],

}
要访问contribs数组中的第三个元素,可以这样访问:

“contribs.2”
嵌入式Documents

通过圆点符号.来链接嵌入式document的名字和field名,来定位和访问嵌入式document:

.
举例:对于下面的document:

{

name: { first: “Alan”, last: “Turing” },

}
要访问name中的last字段,可以这样使用:

“name.last”
Documents限制

Documents有下面这些属性和限制:

Document大小限制

每个BSON文档的最大尺寸为16兆字节。

最大文档大小有助于确保一个单个文档不会使用过量的内存,或通信过程中过大的带宽占用。

若要存储超过最大尺寸的文档,MongoDB提供了GridFS API。可以看mongofiles和更多有关GridFS的文档

Document Field顺序

MongoDB中field的顺序默认是按照写操作的顺序来保存的,除了下面几种情况:

_id总是document的第一个field
可能会导致文档中的字段的重新排序的更新,包括字段名重命名。
在2.6版本起,MongoDB开始积极地尝试保留document中field的顺序。

_id字段

_id字段有以下行为和限制:

默认情况下,MongoDB会在创建collection时创建一个_id字段的唯一索引
id字段总是documents中的第一个字段。如果服务器接收到一个docuement,它的第一个字段不是id,那么服务器会将_id字段移在开头
_id字段可以是除了array数组之外的任何BSON数据格式
以下是存储_id值的常用选项:

使用ObjectId
最好使用自然的唯一标识符,可以节省空间并避免额外的索引
生成一个自动递增的数字。请参阅创建一个自动递增序列字段
在您的应用程序代码中生成UUID。为了更高效的在collection和_id索引中存储UUID值,可以用BSON的BinData类型存储UUID。

  • 大部分MongoDB驱动客户端会包含_id字段,并且在发送insert操作的时候生成一个ObjectId。但是如果客户端发送一个不带_id字段的document,mongod会添加_id字段并产生一个ObjectId *