-
数据库的概述:
**数据库:**简而言之可视为电子化的文件柜-----存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作
所谓“数据库”系以一定方式存储在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合
数据库管理系统:(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据他说支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器集群、移动电话;或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
-
数据库的分类:
-
关系型数据库(RDBMS)
是指采用关系模型来组织数据的数据库,其以行和列的形式存储数据,关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
结构化查询语言,我们称之为SQL;
常见的关系型数据库:
2.1.1 oracle数据库 Oracle前身叫SDL、由Larry Ellison和两个变成任意在1977创办,他们开发了主机的拳头产品,在市场上大量销售。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二 。 Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商 主要应用范围:传统大企业、大公司、政府、金融、证券等。 版本升级:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c 2.1.2 MySQL MySQL被广泛的应用在Internet上的大中小型网站中。由于体积小、速度快、总体拥有成本低,开放源代码 2.1.3 MariaDB数据库 MAriaDB数据库管理系统是MySQL数据库的一个分支,主要由开元社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的潜在风险,因此MySQL开元社区采用分支的方式来避开这个风险。 MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎,它使用了Percona的XtraDB(InnoDB的变体)这个版本还包括了PrimeBase XT (PBXT)和Federated X存储引擎。 2.1.4 SQL Server数据库 Microsoft SQL Server是微软公司开发的大型关系数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Winodws操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构。SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行 2.1.5 Access数据库 Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业只用 Access不是数据库语言,只是一个数据库程序,目前最新版本为Office 2007,其特点主要如下: (1)完善地管理各种数据库对象,具有强大的数据组织,用户管理、安全检查等功能 (2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户管理系统具有传统的XSASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Ckient/Server)结构和响应的数据库安全机制,Access具备了许多先进的大型数据管理管理系统所具备的特征。 (3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表 (4)作为Office套件的一部分,可以与Office集成,实现无缝连接 (5)能够利用Web检索和发布数据,实现与Internet的连接,Access主要适用于中小企业应用系统,或作为客户机/服务器系统中的客户端数据库。 2.1.6 其他不常用关系型数据库 DB2,PostgreSQL,Informix,Sybase等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到 常见的关系型数据库介绍
-
非关系型数据库:
非关系型数据库也被称为NOSQL数据库,NOSQL的本意是“Not Olnly SQL” ,NOSQL的产生并不是要彻底的否定关系型数据库,而是作为传统关系型数据库的一个有效的补充,NOSQL数据库在特定的场景下可以发挥难以想象的高效率和高性能。
NOSQL非关系型数据库小结:
- NOSQL:不是否定关系型数据库,而是作为关系型数据库的一个重要补充
- NOSQL:为了高性能、高并发而生、忽略影响高性能、高并发的功能
- NOSQL:典型产品memcached(纯内存),redis(持久化缓存),mongodb(文档的数据库)
非关系型数据库分为以下4种:
(1)键值(Key-Value)存储数据库 键值数据库就类似传统语言中使用哈希表,可以通过key来添加、查询或删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性 键值(Key-Value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署、高并发 k1—>数据 k2—>数据 典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB (2)列存储(Column-oriedted)数据库 ======>了解即可,一般公司用不到 这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。 典型产品:Cassandra,HBase (3)面向文档(Document-Oriented)数据库 面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关系对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储 典型产品:MorgoDB、CouchDB (4)图形(Graph)数据库
常见的非关系型数据库:
2.2.1 memcached(key-value) Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache 是这个项目的名称,而Memcached是服务端的主程序文件名。 缓存一般用来保存一些进程被存取的对象或数据,通过缓存来存取对象或数据要比在磁盘上存取块很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的Web应用。 官网:http://memcached.org/ 由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的特久化存储机制和异步主复制机制,使Memcached具备了事务恢复能力、持久化数据能力和分布式复制能力,memcached非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代如Redis Memcached小结: 1、key-value行数据库 2、纯内存数据库 3、持久化memcachedb(sina) 2.2.2 Redis(key-value) 和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。 redis是一个高性能的key-value数据库。redis的出现、很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python、Ruby、Erlang、PHP客户端,使用方便。 官方:http://www.redis.io/documentation redis特点: 1)支持内存缓存,这个功能相当于memcached 2)支持持久化存储,这个功能相当于memcachedb,ttserver 3)数据库类型更丰富。比其他key-value库功能更强 4)支持主从集群、分布式 5)支持队列等特殊功能 应用:缓存从存取memcached更改存取redis 2.2.3 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.自动处理碎片、以支持云计算层次的扩展性 2.2.4 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开发,后转变成了开源项目。 2.2.5 其他不常用非关系型数据库 HBase、MemcacheDB、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver) ttserver 持久化输出,缺点存储2千万条 性能下降(由日本人发明) 常见的非关系型数据库介绍
-
-
数据库的安装配置:
windows环境安装简单步骤:
#1、下载:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ #2、解压 如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64 #3、添加环境变量 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】 #4、初始化 mysqld --initialize-insecure #5、启动MySQL服务 mysqld # 启动MySQL服务 #6、启动MySQL客户端并连接MySQL服务 mysql -u root -p # 连接MySQL服务器 #7、将mysql添加系统服务 注意:--install前,必须用mysql启动命令的绝对路径 # 制作MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove 注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令: # 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql win10下安装mysql
linux环境安装步骤
1.解压tar包 cd /software #cd到一个自己创建的文件夹中 tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz #解压下载下来的mysql文件,如果没在这个文件夹中,记得把文件移动到这个文件夹中,通过mv指令 mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21 #通过mv指令给这个解压出来的文件改了个名字 2.添加用户与组 groupadd mysql #添加用户组 useradd -r -g mysql mysql #创建mysql用户,并添加到mysql用户组 chown -R mysql:mysql mysql-5.6.21 #这是mysql用户和mysql用户组的归属 chmod +x -Rf /usr/local/mysql #赐予可执行权限 3.安装数据库 su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data #使用mysql用户来将我们下载并解压的那个mysql文件,安装到/software/mysql-5.6.21/data这个目录里面 4.配置文件 cd /software/mysql-5.6.21/support-files #配置文件在这个目录下 cp my-default.cnf /etc/my.cnf #copy一份my-default.cnf文件到etc目录下,并起名为my.cnf文件 cp mysql.server /etc/init.d/mysql #copy一份mysql.server文件,到etc的init.d的mysql文件夹中,启动加载的初始配置文件会有一部分在这个目录里面读取 vim /etc/init.d/mysql #若mysql的安装目录是/usr/local/mysql,则可省略此步 修改文件中的两个变更值 basedir=/software/mysql-5.6.21 #基础目录 datadir=/software/mysql-5.6.21/data #数据目录 5.配置环境变量 vim /etc/profile #环境变量的配置文件 ,添加下面两行 export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" #使配置生效,通过source指令 source /etc/profile 6.添加自启动服务 chkconfig --add mysql chkconfig mysql on 7.启动mysql service mysql start 8.登录mysql及改密码与配置远程访问 mysqladmin -u root password 'your_password' #修改root用户密码 mysql -u root -p #登录mysql,需要输入密码 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允许root用户远程访问(默认远程连接是不能使用root用户来连接的) mysql>FLUSH PRIVILEGES; #刷新权限 9. 一些必要的初始配置(除了下面这些,将来玩mysql的时候还有很多很多的配置) 1)修改字符集为UTF8 vi /etc/my.cnf 在[client]下面添加 default-character-set = utf8 在[mysqld]下面添加 character_set_server = utf8 2)增加错误日志 vi /etc/my.cnf 在[mysqld]下面添加: log-error = /usr/local/mysql/log/error.log general-log-file = /usr/local/mysql/log/mysql.log 3) 设置为不区分大小写,linux下默认会区分大小写。 vi /etc/my.cnf 在[mysqld]下面添加: lower_case_table_name=1 修改完重启:#service mysql restart linux下安装mysql
在linux上使用mysql的时候,一定要注意的是就是权限问题,
-
mysql安装目录的介绍:
其中,我们重点看一下data文件夹:如果你找不到自己建立的库或者表的文件,可能不在这个data文件夹下面,连接上mysql之后,输入:show global variables like “%datadir%”;来查看数据文件存储路径,找到路径之后,到对应路径下如果找不到这个文件夹,那么可能是隐藏的,把隐藏的文件显示一下就行了。
-
在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端
[client] #设置mysql客户端默认字符集 default-character-set=utf8 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 user = 'root' password = '123' [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=E:\mysql-5.6.45-winx64 # 设置mysql数据库的数据的存放目录 datadir=E:\mysql-5.6.45-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
-
修改字符集编码的方法:
使用数据库的时候会出现中文乱码的问题,这个问题是因为存储和读取的编码方式不一样,所以在使用数据库之前需要修改字符集编码。
如何查看所建数据库的编码格式:打开mysql输入 show create database + 库名;
可以看到这库的编码是utf-8的,这是我自己已经配置好的,而mysql默认的字符集是:Latin1,
由于创建库时编码已经指定,所以表的编码也是utf-8,查询的方式的是:
show create table + 表名;
我们来看一下各个角色的编码(客户端、服务端、数据库等)
在mysql中执行指令:show variables like ‘%char%’;
一.在插入数据之前,先执行一条指令:set names latin1;这样就可以修改编码格式。
二,在配置文件中写入固定的格式,这样就是永久的修改,
default-character-set=utf8 # 修改成utf-8的编码格式
-
MySQL客户端连接服务器端时的完整指令
mysql -u root -p + 密码 -h 127.0.0.1 -P 3306
-
如果密码忘记怎么办?
在windows的dos环境进行
1 停掉MySQL服务端 : net stop mysql 2 切换到MySQL安装目录下的bin目录下,然后手动指定启动程序来启动mysql服务端,指令: mysqld.exe --skip-grant-tables (跳过验证) 3 重新启动一个窗口,连接mysql服务端, 4 修改mysql库里面的user表里面的root用户记录的密码: update user set password = password('新密码') where user='root'; 5 关掉mysqld服务端,指令: tasklist|findstr mysqld taskkill /F /PID 进程号 6 正常启动服务端 : net start mysql
-
修改密码的三种方式:
方法1: 用SET PASSWORD命令 首先登录MySQL,使用mysql自带的那个客户端连接上mysql。 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123'); 方法2:用mysqladmin (因为我们将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码) 关于mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能,虽然mysqladmin的很多功能通过使用MySQL自带的mysql客户端可以搞定,但是有时候使用mysqladmin操作会比较简单。 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysqladmin -uroot -p123456 password 123 方法3:用UPDATE直接编辑那个自动的mysql库中的user表 首先登录MySQL,连接上mysql服务端。 mysql> use mysql; use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。 mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。 mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。
-
存储引擎:
存储引擎:MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
- 查看mysql当前默认的存储引擎:show variables like ‘%storage_engine%’;
2. 查看mysql全部的引擎:show engines;-
分类
MyISAM: 拥有较高的插入,查询速度,但不支持事务 InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定 BDB: 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性 Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失 Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用 Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差 Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用 Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。 BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继 另外,Mysql的存储引擎接口定义良好。有兴趣的开发者通过阅读文档编写自己的存储引擎。