zoukankan      html  css  js  c++  java
  • MySQL数据库初识

    1.基础部分

    1.1数据库是什么

    之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上。

    如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题

    但需要考虑的问题是:程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,垂直扩展是有极限的。于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。

    需要注意的是,虽然我们将程序的各个组件分布到各台机器,但各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。

    于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件,即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。。。。

    为了远程访问并处理这台共享机器上的文件,我们必须为我们的程序额外写一段代码,完成如下功能:

    # 1.远程连接
    # 2.打开文件
    # 3.读写(加锁)
    # 4.关闭文件
    

    我们写任何程序都需要有这段代码,于是我们提取这段代码,写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。

    1.2数据库概述

    什么是数据?(Data)

    数据:描述事务的符号记录,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机

    在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,就相当于文件里的一行内容,如:

    1  haiyan  female 20 甘肃  计算机系 
    

    单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,依次定义各个字段的意思

    id   name    sex     age   adderess   major   #字段
    1   haiyan  female  20      甘肃     计算机系   #记录
    

    如果这样表示的话就了解了一个人的信息了,让人一看就清楚了

    什么是数据库?(DataBase,简称DB)

    数据库,顾名思义就是存放数据的仓库,只不过这个仓库是在计算机存储设备上。

    数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享

    什么是数据库管理系统(DataBase Management System 简称DBMS)

    在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键

    这就用到了一个系统软件---数据库管理系统

    如MySQL、Oracle、SQLite、Access、MS SQL Server

    mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
    oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
    sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

    数据库说白了就是文件夹
    数据库管理系统就是一个软件
    数据库服务器:就是对外专门提供数据的一个机器

    数据库服务器,数据库管理系统,表与记录的关系(重点理解)

    表:student,scholl,class_list(即文件)

    数据库:lzsh_info(即文件夹)

    数据库管理系统:如mysql(是一个软件)

    数据库服务器:一台计算机(对内存要求比较高)

    总结:

    ​ 数据库服务器---运行--->数据库管理软件

    ​ 数据库管理软件--->管理--->数据库

    ​ 数据库---组织--->表,即文件夹---组织--->文件

    ​ 表---存放--->多条记录,即文件---存放--->多行内容

    数据库管理技术的发展历程(了解)

      1.人工管理阶段

      2.文件系统阶段

      3.数据系统阶段

    2. 数据库分类

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

    2.1 关系型数据库(RDBMS)

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

          这个表看着好乱啊,但是你细看一下,这几个表之间建立了某种关系,共享着双方的数据。这就是关系。关系型数据库里面存数据的时候就类似这个样子的。有个大概了解了吗~~~

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

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

    常见的关系型数据库介绍

    2.2 非关系型数据库

    非关系型数据库也被成为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(文档的数据库)

    非关系型数据库又分为以下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 CabinetTokyo Tyrant(ttserver) 
      ttserver 持久化输出,缺点存储2千万条 性能下降(由日本人发明)
    

    3.MySQL介绍

    3.1mysql版本

    双授权版本:社区版(完全免费,功能也够nb了)和商业版(更好,功能更多更强大一些,但是收费,VIP,有售后服务,也会参考和吸收社区版的一些nb的功能,安全性和稳定性都是最好的,大几十万),一般NB的开源软件都是双授权的
    每个版本又分四个版本依次进行发布:
    Alpha版:一般只在开发公司内部使用,不对外公开,测试、自我检查的版本
    Beta版:一般是开发完也测试完的版本,一般不会出现比较大的性能bug(一般我们不用,阿里、去哪儿会使用这个版本,有些新功能,内部有高手能调,也能评估新功能的性能)
    RC版:根据Beta版测试之后收集到一些bug等在进行完善的一个版本
    GA版:软件正式发布的版本,没有特别的需求一定要使用GA版,有些公司追求新功能会使用Beta版,这是个例。

    3.2MySQL的产品线:

    ​ 最早期,mysql是按照3.x--4.x--5.x等来开发的,但是为了提高MySQL的竞争优势,以及提高性能、降低开发维护成本等原因,同时,更方便企业用户更精准的选择合适的版本产品用于自己的企业生产环境中,MySQL在发展到5.1系列版本之后,重新规划为三条产品线。
    ​ 第一条:5.0.xx 到 5.1.xx产品线系列介绍
    ​ 第二条:5.4.xx 到 5.7.xx产品线系列介绍(主流:5.5和5.6)
    ​ 第三条:6.0.xx 到 7.1.xx产品线系列介绍

    3.3MySQL数据库软件命名介绍

    以mysql-5.6.42.tar.gz的版本号来解释:
    1.第一个数字5是主版本号,描述了文件格式。所有版本5发行都有相同的文件格式。
    2.第二个数字6是发行级别。主版本号和发行级别组合到一起便构成了发行序列号。
    3.第三个数据42是在此发行系列的版本号,随每个新发布版递增。通常你需要已经选择发行的最新版本,每次更新后,版本字符串的最后一个数字会递增。如果增加了一些新功能或者微小的不兼容性,版本字符串的第二个数字会递增。如果文件格式改变,第一个数字会递增。
    一般有的版本也会加上上面我们说的4个版本的后缀,beta、alpha、rc版、ga版等等,我们举得这个例子是不带后缀的,就相当于GA版

    4.MySQL的下载安装、简单应用及目录介绍

    4.1下载安装

    这个下载安装内容我专门整理了一个博客,专门针对的windows10的:https://www.cnblogs.com/clschao/articles/9916971.html.

    win10下安装mysql

    #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
    

    4.2MySQL的简单使用

    1.开启服务端,mysqld net start mysql
    2.使用mysql自带的客户端进行连接,cmd下输入mysql -u root -p,然后回车,会提示你输入密码,此时初始的root用户还没有密码,所以还是直接回车就可以连接上了
    3.show databases;先不讲里面的内容,说一下这是几个库,每个项目可以有自己单独的一个库,里面放这个项目的所有数据表
    4.创建一个库:create database CRM;然后show databases;查看一下就有了这个crm库,不分大小写,统一会变成小写,对照着我们mysql安装目录下的data文件夹里面的内容看一下,库就是对应的文件夹。
    5.我们目前在所有数据库之上,想在我们自己项目的库里面操作数据,就需要切换到我们自己这个crm项目的库里面进行数据的操作,切换数据库使用use + 库名,例如:use crm;就提示你切换成功了。
    6.我们说过,库里面维护的数据就像一张一张的数据表,类似excel,对不对,那我们创建一张表看一下,命令:
          create table student(
            id int,
            name char(10),
            age int
          );
    7.再执行show tables;就可以看到有了一个student表
    8.查看一下这个表里的数据select * from student;发现什么数据也没有
    9.插入几条数据,写几条数据:insert into student values(1,'d',18),(2,'x',11),(3,'d',10),(4,'k',9);然后回车,就执行了这条指令,然后我们再查看一下这个表里面有没有数据了,执行上一条指令,select * from student;发现里面就有数据了:
    结果:
      mysql> select * from student;
      +------+------+------+
      | id | name | age |
      +------+------+------+
      | 1 | d | 18 |
      | 2 | x | 11 |
      | 3 | d | 10 |
      | 4 | k | 9 |
      +------+------+------+
      4 rows in set (0.00 sec)   

    4.3MySQL安装目录介绍

    ​ 其中,我们重点看一下data文件夹:如果你找不到自己建立的库或者表的文件,可能不在这个data文件夹下面,连接上mysql之后,输入show global variables like "%datadir%";来查看数据文件存储路径,找到路径之后,到对应路径下如果找不到这个文件夹,那么可能是隐藏的,把隐藏的文件显示一下就行了。

    5.root用户密码设置及忘记密码的解决方法

    mysqld --initialize-insecure # 初始化root密码
    

    方法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

    ​ 只用mysqladmin的时候,会出现一个warning警告信息:Warning: Using a password on the command line interface can be insecure.,这个没关系,是提示你,你直接在cmd下使用明文设置密码的时候,是不安全的,因为别人可以通过翻看你输入指令的历史记录来查看到你设置的密码,所以提示你一下,不信你按上下键,可以看到自己之前输入的命令,或者输入下面这个指令也可以看到:

    ​ 所以我们最好连接进入到mysql里面之后,在进行密码的修改和设置。
    方法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; 刷新权限,让其生效,否则不生效,修改不成功。

    在忘记root密码的时候,可以这样(注意:root密码最好不要忘记,找地方记录下来,不然如果是工作中你们使用的数据库(不管是测试的还是线上的,都是比较麻烦的事情,数据库轻易不会让你重启的,不过作为一个开发来讲,你应该是无法用root用户的~~~))
    以windows为例:

    1. 关闭正在运行的MySQL服务,net stop mysql(这个mysql是你添加的mysqld到系统服务时的服务名)。 
    2. 打开DOS窗口,转到mysqlin目录。 
    3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证,因为之所以mysql启动之后,客户端连接的时候需要登陆认证,输入密码什么的,是因为mysql服务端启动的时候,加载了自己内部的一些权限相关信息的授权表、权限认证表什么的,这样就要求客户端必须有认证,如果启动的时没有加载这些表和设置,那么我们客户端再进行登陆的时候,就不需要认证了,那么就可以登陆上了,登陆之后,我们到mysql这个存有所有用户信息的表中去修改root用户或者别的用户的密码了
    4.用UPDATE直接编辑那个自动的mysql库中的user表 
    5.首先登录MySQL,连接上mysql服务端。 
    6.mysql> use mysql;   use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。
    7.mysql> update user set password=password('123') where user='root' and host='localhost';   其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。
    8.mysql> flush privileges;  刷新权限,让其生效,否则不生效,修改不成功。
    
    '''
    注意一个问题,如果我们直接使用的上面这个指令,也即是mysqld --skip-grant-tables,也就是直接通过mysqld启动的mysql服务的话,我们就不能通过net stop mysql的方式来关闭mysql服务了。但是可以通过别的方式来关闭,我在安装mysql的那篇博客里面写到了,杀进程的方式,知道你肯定忘记了,再给你写一下(win10):tasklist |findstr mysqld找到这个mysqld服务的端口号,然后taskkill /F /PID 端口号来杀死这个mysql服务的进行,以后就可以使用net start/stop mysql的方式来启动和关闭了。
    '''
    

    注意:我们在使用cmd的时候,经常需要使用管理员身份来运行cmd窗口

    6.MySQL配置文件ini

    在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-winx64data 
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    
  • 相关阅读:
    docker 上的第一个网址
    redis 和mongodb的区别
    在docker 里 搭建redis 主从节点
    .Net AOP 的简单入门 (静态代理 适配器模式完成aop)
    CocoaPods pod install下载慢问题
    [OC]OC基础概念
    [Swift]swift之随机数
    [Swift]iOS开发之气泡对话框的实现
    [Swift]CoreData防止数据冲突
    [Swift]iOS开发之初识CoreData
  • 原文地址:https://www.cnblogs.com/fengqiang626/p/11422446.html
Copyright © 2011-2022 走看看