• 数据库初始及安装


    引入

    ​ 数据库称为数据管理系统,这个数据管理系统我们称之为DBMS,DB(database)就是数据库的意义,M(manage)就是管理的意思,S(system)就是系统的意思,其实就是英文名的首字符缩写。市场上冒出了很多优秀的数据库管理系统,例如:mysql、oracle、db2等等,人家开发好了,你使用就行了,既然是使用别人写好的数据库管理系统,那么我们在操作的时候,就要按照人家的规范来操作,这个规范叫做sql,我们通过这个系统来操作数据的语句叫做sql语句。那么过程就是这个样子的:首先下载安装人家的数据管理系统,然后启动系统,我们的项目如果想通过这个系统来操作数据,那么就需要你的项目中字节写一个socket客户端,要满足人家这个系统的服务端的消息格式要求,然后就按照人家规定好的sql语句写好操作数据的命令,使用你的写好的客户端通过网络发送给这个存放数据的机器上的数据管理系统的服务端,服务端街道这个命令之后,解析,然后产生对应的数据操作,你要是查询数据,就将查询数来的数据原路返回给你,如果你要是修改数据,那么我服务端就在系统上修改对应的数据。这就是整个操作流程了,其实这个系统就是一个基于socket编写的C/S架构的软件。

    img

    数据库分类

    目前的数据库可以分为两个大类:关系型数据库和非关系型数据库

    关系型数据库

    解释:关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式,不是excel,但是和excel的形式很像),结合下图来看一下,

          img

    操作关系型数据库的命令,我们称之为SQL,看解释

    	结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
    	结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
    1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的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”
    指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。

    ​ 随着互联网Web2.0网站的星期,传统的关系型数据库在应付web2,0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。

    ​ 例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NOSQL(非关系型)类的数据就是在这样的情景下诞生并得到了非常迅速的发展

    ​ 高性能、高并发、对数据一致性要求不高
    ​ 开源的NoSQL体系,如Facebook的Cassandra,Apache的HBase,也得到了广泛认同,Redis,mongb也逐渐越来越受到各类大中小型公司的欢迎和追捧

    ​ NOSQL非关系型数据库小结:

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

    常见的非关系型数据库

    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 CabinetTokyo Tyrant(ttserver) 
      ttserver 持久化输出,缺点存储2千万条 性能下降(由日本人发明)
    

    MySQL下载安装

    以windows来举例。

    ​ mysql下载地址:https://dev.mysql.com/downloads,如果你在mysql官网下载的是zip压缩包,看操作,注意和上面第一种方法的下载网址不同

      img

     然后按照下面的选择来下载,发现是zip压缩包对吧,zip压缩包解压之后就能用,上面的msi还需要安装一下,安装的时候可以选择很多的依赖环境一起安装:

      img

        点击download进来:

     img

    ​ 下载完成以后进行安装:

    ​ 1. 解压MySQL压缩包,将以下载的MySQL压缩包解压到自定义目录下。我放在D:Program FilesMySQL

       img

    ​ 2. 解压完成之后其实就可以用了,但是为了方便使用,也就是在cmd启动mysql的时候,就不用加上全路径了,所以添加一下环境变量,将bin这个文件夹添加到环境变量,bin这个文件夹中有mysqld服务端,有mysql自带的一个客户端,所以添加了环境变量之后,在cmd中直接就可以使用了。

        img

        

        img

    ​ 这样就将我们的mysql服务端(mysqld)和mysql自带的一个客户端(供用户在本机测试用的,也是cmd窗口下使用的,客户端叫做mysql,后面操作的时候会使用到)

    ​ 然后我们直接在cmd窗口就可以启动mysql服务端了,并且可以在任务管理起里面查看。

        img

    ​ 然后我们再启动一个cmd窗口来使用一下mysql客户端,然后连接一下我们开启的服务端,就可以成功了。

    ​ 连接指令是:mysql -h 服务端IP地址 -P(大写) 3306(mysql服务端默认端口) -uroot(用户,这里我使用root用户来测了) -p密码 。注意:如果这样直接输入密码的话,密码和前面的-p中间不要有空格。

    ​ 我自己在本机进行测试的,所以我写的mysql服务端的IP地址为我本机的回环地址127.0.0.1,其实如果是自己测试本机的mysql服务端,我们可以不用写ip地址和端口的,直接写mysql -uroot -p,但是连接别的电脑的mysql的时候一定要写IP地址和端口,并且不能用root用户去远程连接别的电脑的mysql服务端,并且要注意mysql服务器上的防火墙是否允许3306能够被外人连接,如果想让别人连,要更改防火墙设置,让他允许3306端口被连接,或者直接关闭防火墙(不建议直接关闭,测试的时候可以用),否则会报错。

        img

        ip地址除了写127.0.0.1之外,还可以写localhost,或者自己本机的ip地址,但是写本机的ip地址的时候,服务端会将你的客户端视为外部设备,不允许你这样登陆。

        自己本机测试连接的时候,完全可以不用写ip地址和端口

        img

    ​ 到目前为止,我们就已经可以连接并使用mysql数据库了,但是你发现,关闭mysql服务端比较麻烦,启动的时候我们直接输入的mysqld回车就启动了

    ​ 关闭的方式有两种:

    ​ 1.通过任务管理器来关闭服务端:

            img

    ​ 2.通过cmd指令来关闭mysql服务端

            img

            img

    ​ 所以我们可以通过系统服务的方式来控制mysql服务的开启或者关闭,那么就需要将mysql服务加入到系统服务中,来看一下怎么制作成系统服务:

    ​ 打开cmd窗口,注意:必须以管理员身份打开cmd窗口,在左下角的地方找到这个圆圈,点击,然后输入cmd,匹配出来命令提示符,然后右键点击,以管理员身份打开

            img

            img

    ​ 然后输入 mysqld --install 服务名(可以给这个服务一个名字,直接跟在这个指令的后面,不写也可以,会默认有一个,后面可以查看到)

            img

    ​ 这样就添加系统服务了

    ​ 然后win键+r 打开运行窗口,里面输入services.msc来打开系统服务列表

            img

    ​ 就可以看到mysqld服务了,如果没有就点击上面的刷新按钮

            img

    ​ 选中MySQL服务这一项,我们就可以直接右键查看功能,功能里面有启动和关闭,就可以通过系统服务的形式来启动和关闭MySQL服务了,这个服务是默认开启的,我们也可以自行设置是否自动开机启动等等的行为,左键双击一下这个服务你就看到下面的窗口了。

            img

            

    ​ 添加了系统服务以后,我们在启动和关闭这个mysql服务,就可以在cmd窗口下使用两个指令就搞定了:

    ​ 启动指令:net start mysql

    ​ 关闭指令:net stop mysql

    ​ 并且不能再使用 mysqld指令直接启动了。

          img

    ​ 还可以通过指令来移除刚才添加的系统服务:

    ​ cmd下移除服务命令为:mysqld remove

    简单总结

    #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-winx64inmysqld" --install
     
        # 移除MySQL的Windows服务,在终端执行此命令:
        "c:mysql-5.7.16-winx64inmysqld" --remove
    
        注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
        # 启动MySQL服务
        net start mysql
     
        # 关闭MySQL服务
        net stop mysql
    

    在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端,这样以后在启动mysql就直接输入mysql就行,不用每次都输入用户和密码,还有其它的一些配置;

    [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-winx64data 
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    

    如果密码忘记怎么办?

    在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;  刷新权限,让其生效,否则不生效,修改不成功。
    
  • 相关阅读:
    数据访问 之 修改数据 (重要)---2017-04-27
    数据访问 之 删除操作 ------ 2017-04-27
    连接数据库的注册、登录----2017-04-26
    数据访问(创建链接、读取数据、例题)--2017-04-25
    C/S 和B/S 详解 --- 2017-04-25
    二阶段测试改错与反思(数据库+面向对象)----2017-04-24
    qq面板(仿版,未完待续中。。。。)---2017-04-24
    网站设计需要注意的20个常犯错误---2017-04-23
    数据库四大特性;
    数据库部分---查询-简单查询;
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/12121979.html
Copyright © 2020-2023  润新知