什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
关系型数据库
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类,合并,连接或选取等运算实现数据的管理。MYSQL ORACLE
(非关系型数据库,Not OnlySql)NoSql 其实是对传统关系型数据库的有效补充。
1)键值(Key-Value)存储数据库
键值数据库就类似传统语言中使用的哈希表。可以通过key来添加,查询或者删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性。
键值(key-value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单,易部署,高并发。
经典产品:Memcached,redis,memcacheDB,Berkeley DB
2)列存储(column-oriented)数据库
列存储数据库将数据存在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个person类,我们通过会一起查询他们得姓名和年龄而不是薪资。这种情况下,名字和年龄就会被放入一个列族中,而薪资则在另一个列族中。而薪资则在另一个列族中。
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的
典型产品:Cassandra,HBase 基于列的存储系统
3)面向文档(Document-Oriented)数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON.文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
面向文件数据库会将数据以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串,数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML,JSON或者JSNOB等多种形式存储。
典型产品:MongoDB,GouchDB
4)图形(Graph)数据库
图形数据库允许我们将数据以图的方式存储。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve jobs,Apple和Next,则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs。
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据类型。许多NoSQL数据库都有RSET式的数据接口或者查询API。
典型产品:Neo4J,InfoGrid
一些关键术语
数据库:数据库是一些关联表的集合
数据表:是数据的矩阵,在一个数据库中的表看起来像一个简单的电子表格。
列:是一组相同类型的数据
行:是一组相关的数据,比如一个用户的数据
冗余:多余的储存输出,降低了性能,提高了数据的安全性。
主键:主键是唯一的,一个数据表只有一个主键
外键:外键作用于关联两个表
符合键:将多个列作为索引键,一般用于符合索引
索引:使用索引可以快速访问数据表中的特定信息,索引是对数据库表中一列或者多列的值进行排序类似目录。
表头:每一列的名称
一些基本操作
use 数据库名
show databases 列出数据库列表
show tables列出所有表
show columns from 表: 显示值
show index from 表:显示数据表的索引信息
创建数据库是create database 数据库名
删除是drop database 数据库名
创建mysql数据库的数据表create table table_name(column_name column_type)
mysql> CREATE TABLE tb_emp1
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
create table if not exists test(id int)
(int后设置auto_increment是自动增加)
primary key('关键字')用于定义列为主键
数据表删除是drop table table_name
向表中添加数据是insert into table_name (id,name) values (1,‘amane’);
查询数据方式是select * from table_name;
查询语句的语句格式是select column_name,column_name from table_name [where clause] [limit n][offset m]
where binary是声明查询的关键字必须是大小写匹配的
where columns_name like xxx 其中xxx可以用%来表示任意匹配 类似正则表达式
select colums_name from table_name union select colums_name from table_name order by country 可以后面加all保留重复的值
order by columns_name ASC正向排序 DESC逆向排序 se'l
修改数据是update table_name set name=‘suzuha’,id=3 [where clause];
删除数据是delete from table_name [where clause]
向已经建立的表中加入一列
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(45) ;
后面加after COLUMN_NAME就是加在某一列后面 加first 就是在最前面