• 数据库进阶


    1. DBMS 数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能)

      • 存储数据的,存在硬盘上(内存无法永久保存)

      • 为什么要有?

        1.因为首先数据都是存储在硬盘上的,硬盘的效率本身就低,直接操作硬盘上的文件效率低
        方便管理数据,以及提高对数据的管理效率
        2.我们自己的电脑上写的程序和我们自己电脑上存储的数据都在这一台电脑上了,想和别人共享一个数据或者一个文档也是比较麻烦的,并且如果和别人共享,那么可能造成自己电脑的安全性变低了,但是公司内部的项目可能就会使用一些共同的数据啊,这样共享起来就很麻烦。
        3.项目和数据如果在一个电脑上,如果电脑崩了,数据就会丢失,很麻烦
        4.稳定性和安全性不够
        
        
      • 优点:

        1.提高了效率,不用我们直接去硬盘操作数据
        2.支持并发
        3.有备份,认证功能,支持对外通信
        

        1567068629837

      • 工作方式:

        1.首先要知道:软件是别人开发的,所以我们要按照别人的开发规范(sql)来操作,
        2.步骤:
        	我们首先要在项目中手写一个socket客户端(这个客户端是为了通过这个系统操作数据的,所以要满足人家系统的服务端的消息格式要求,按照别人规定好的sql语句去操作数据)
        	使用写好的socket客户端基于网络发送给存储数据的电脑上的管理数据的软件的服务端
        	服务端去认证,解析。产生相对应的操作,并返回结果
        3.相当于一个基于C/S架构的软件
        
    2. mysql RDBMS 关系型数据库管理系统

      • 类似的几个表之间存在的某种必要的联系

      • 	我们使用python操作数据库的时候,会使用一个叫做pymysql的工具来搞,他就是一个咱们MySQL服务器的客户端,连接上服务端就可以操作服务端的保存的你的项目的数据了。
        	
        	例如用户要查看自己的信息,就通过你写的程序接受到客户的请求,通过自己的mysql客户端去MySQL服务端查看对应的信息,然后mysql服务端将这些信息发送给你的py程序客户端,你通过程序再将数据返回给你的用户,你的用户就看到了自己的信息,就是这么个过程,
        
      • 常见的几种关系型数据库

        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等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到
        
    3. sql语句 结构化查询语句

      • 不同数据库系统之间的SQL不能完全相互通用
    4. 永久修改字符集编码的方法(默认为latin1)

      [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
      
    5. 在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端

      • 目录结构:

        1567070240542

      • data文件下的内容

        1567070511575

    6. 查看字符集编码的指令:

    show variables like "%char%";
    

    MySQL客户端连接服务端时的完整指令

    mysql -h 127.0.0.1 -P 3306 -u root -p
    
    1. 如果密码忘了怎么办?
    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('666') where user='root';
    5 关掉mysqld服务端,指令:
    	tasklist|findstr mysqld
    	taskkill /F /PID 进程号
    	
    6 正常启动服务端(net start mysql)
    
    1. 修改密码的三种方式
    方法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;  刷新权限,让其生效,否则不生效,修改不成功。
    
    1. 存储引擎
    默认存储引擎 Innodb
    查看存储引擎
    show engines;
    
    1. 总结部分操作代码(分号‘;’结尾)

      • 开启服务端: mysqld et start mysql

      • 使用mysql自带的客户端连接: mysql -u root -p (初始默认没有密码)

      • 显示所有的库:show databases

      • 查看单独某一个库的信息:show create database crm

      • 修改库的字符集:alter database crm charset latin1

      • 删除数据库:drop database crm

      • 创建一个库:create database CRM(不区分大小写) charset utf8

      • 切换数据库:use 库名

      • 创建表:create table db1(id int,name char(10))

      • 查看表信息:desc db1/describe db1

      • 修改字段属性:alter table db1 modify name char(3)/alter table t1 change name name1 char(2);

      • 查看表里的数据:select from crm/select id,name from db1

      • 插入几条数据:insert into crm values(1,'d'),('2','t')

      • 改字段:

        update t1 set name='sb' where id=2; #把id为2的行(记录)中的name字段的数据改为sb;id>1;id<=1;
        update t1 set name='sb',id=88 where id>2; #对两个字段进行修改
        update t1 set name='sb';#如果不指定where,那么会name字段的所有数据都改成sb。
        
      • 清空表:

        如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始:delete from t1

        数据量大,删除速度比上一条快,且直接从零开始:truncate table t1

        表示:自增:auto_increment

        表示:约束(不能重复且不能为空);加速查找 primary key

      • 删除表:drop table db1

      • 删:delete from t1 where id=1; #删除id为1的行

      • 查看数据文件的存储数据:show global variable like "%datadir%"

      • 启动Mysql服务的时候跳过权限表认证:mysql --skip-grant-tables

      	因为之所以mysql启动之后,客户端连接的时候需要登陆认证,输入密码什么的,是因为mysql服务端启动的时候,加载了自己内部的一些权限相关信息的授权表、权限认证表什么的,这样就要求客户端必须有认证,如果启动的时没有加载这些表和设置,那么我们客户端再进行登陆的时候,就不需要认证了,
      	mysqld --skip-grant-tables,也就是直接通过mysqld启动的mysql服务的话,我们就不能通过net stop mysql的方式来关闭mysql服务了。但是可以通过别的方式来关闭,我在安装mysql的那篇博客里面写到了,杀进程的方式,知道你肯定忘记了,再给你写一下(win10):tasklist |findstr mysqld找到这个mysqld服务的端口号,然后taskkill /F /PID 端口号来杀死这个mysql服务的进行,以后就可以使用net start/stop mysql的方式来启动和关闭了。
      	
      
      • 杀死服务 taskkill /F /PID 端口号

      • 改密码:update user set password = password('123') where user = 'root'

      • 刷新权限:flush privileges

      • 临时修改字符集:set names latin1

  • 相关阅读:
    完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败
    cookie 和session 的区别详解
    ref与out之间的区别整理
    showModalDialog介绍
    meta元素
    [转] Spring Boot特性
    [转] Spring Boot 揭秘与实战(二) 数据存储篇
    Jsch初步
    如何通俗的解释交叉熵与相对熵
    pip安装时的异常,找不到lib2to3\Grammar.txt
  • 原文地址:https://www.cnblogs.com/-777/p/11431194.html
Copyright © 2020-2023  润新知