• day44 初识数据库


    一、数据的演变

    在python学习的过程中,我们一开始的数据是存放在文件中的,这都是按照自己的习惯风格去定制的。后来为了更规范的记录数据,有了一条软件开发目录规范。

    Foo/
    |-- core/
    |   |-- core.py
    |
    |-- api/
    |   |-- api.py
    |
    |-- db/
    |   |-- db_handle.py
    |
    |-- lib/
    |   |-- common.py
    |
    |-- conf/
    |   |-- settings.py
    |
    |-- run.py
    |-- setup.py
    |-- requirements.txt
    |-- README
    

    但这也只是对我们本地的数据做一些操作,真正要联网统一管理数据,需要用到数据库

    二、数据库

    数据库的本质是一款基于网络通信的应用程序

    数据库大致上分为两种:

    • 关系型数据库
      • MySQL、oracle、db2、access、sql sever
    • 非关系型数据库
      • redis、mongodb、memcache

    关系型数据库和非关系型数据库的区别

    • 关系型:
      • 数据之间有彼此的关系或者约束
      • 存储数据的表现形式通常是以表格存储
        • 字段名: name pwd age
        • 数据 : hz 123 18
        • 数据 : lxt 123 18
        • 每个字段都可以设定不同的存储类型限制
    • 非关系型:
      • 储存数据通常是以kv键值对的方式存储

    三、MySQL

    1 基本原理

    任何基于网络通信的应用程序底层都是用socket

    • 服务端
      • 基于socket通信
      • 收发消息
      • SQL语句
    • 客户端
      • 基于socket通信
      • 收发消息
      • SQL语句

    MySQL能支持其他编程语言当成客户端来操作,用的是统一的SQL语言

    2 重要概念介绍

    • 数据库 = 文件夹
    • 表 = 文件
    • 数据 = 文件内的一行行数据
    • 表头 = 表格内的第一行数据
    • 字段 = 第一行数据的元素

    3 安装

    参考网站:https://www.mysql.com/

    4 启动

    MySQL要在终端启动,要先启动一个服务端,然后我们在客户端对数据进行操作

    • 先切换到mysqld所在的bin目录下,然后输入mysqld即可

    • 保留原来的cmd窗口重新打开一个

      """
      常见软件的默认端口号
      	MySQL  3306
      	redis  6379
      	mongodb 27017
      	django  8000
      	flask   5000
      	...
      	
      
      MySQL第一次以管理员身份进入是没有密码的 直接回车即可
      
      客户端连接服务端完整命令
      	mysql -h 127.0.0.1 -P 3306 -uroot -p
      """
      

    5 sql基本语句

    MySQL的sql语句都是以;最为结束的标志

    • 查看所有的库名: show databases
    • 连接服务端的命令简写: mysql -uroot -p
    • 如果不想让服务端执行自己写的错误命令:c
    • 客户端退出:quit 或者 exit
    • 如果输入mysql也连接到了服务端,这只是游客模式,不是管理员模式,功能阉割。

    6 环境变量的配置及系统服务制作

    小知识点补充

    • 如何查看具体进程
      • 查看全部进程:tasklist
      • 查看具体进程:tasklist | findstr mysqld
    • 如何杀死具体进程(必须在管理员cmd窗口下才能成功)
      • taskkill/F / PID号

    环境变量配置

    每次启动mysqld服务端都要在mysql的bin文件目录下才能启动,这样的方式明显很麻烦,我们可以通过把mysqld文件所在路径添加到系统的环境变量中

    这样虽然不用到特定目录下启动服务,但是还是要启动两个cmd

    最优解是把mysql服务端制作成系统服务(开机自启动)

    • 查看当前计算机运行的进程数
      • services.msc
    • 把mysql制作成系统服务
      • mysqld -- install
    • 移除mysql系统服务
      • mysqld -- remove

    7 关于密码

    设置密码指令

    mysqladmin -uroot -p原密码 passwprd 新密码

    直接终端修改即可,不需要进入客户端

    破解密码

    • 先关闭mysql服务端
      • mysql获取账号密码的效验可以看做是一个装饰器,装饰在客户端访问的功能上
      • mysqld --skip-grant-tables
    • 直接以无密码的方式连接
      • mysql -uroot -p 直接回车
    • 修改当前用户的密码
      • update mysql .user set password = password(123456)where user='root' and host = 'localhost'
    • 立刻修改数据刷新到硬盘
      • flush privileges
    • 关闭当前服务器,以正常授权形式启动

    mysql的密码储存是密文形式,如果忘记了就必须重置

    8 统一编码

    mysql在主文件下有一个ini后缀的配置文件

    这个配置文件会在程序刚开始运行的时候先加载,再启动

    但是一般情况不会再这个自带的ini文件内对mysql配置信息进行修改,通常是自己写一个ini文件让程序运行前加载

    my.ini

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    user="root"
    password=123456
    default-character-set=utf8
    

    9 基本sql语句

    ps:大部分的程序的业务逻辑都是增删改查

    针对库的增删改查(文件夹)

    # 增加数据库
    create database db2;
    create database db2 charset = 'gbk';
    # 查询数据库
    show databases; # 查所有
    show create database db2; # 查询指定的数据库
    # 修改数据库属性
    alter database db2 charset = ‘utf8’;
    # 删除数据库
    drop database db2
    

    针对表的增删改查(文件)

    我们要修改表/文件的时候,先要找到这个表/文件所在的数据库/文件夹

    # 查看当前所在的库的名字
    select database();
    # 切换库
    use db2;
    # 增加表
    create table t1(id int,name char(4)) # 内涵字段名和字段的数据类型
    # 查询表
    show tables # 查询当前库所有的表
    show create table t1;# 查询当前库指	定名称的表
    # 这种语句查出来的结果是select语句的形式
    describe t1; # 支持简写 desc t1;
    # 这种语句的查询结果是以表格的形式
    # 修改表
    alter table t1 modify name char(16) # 修改表某一字段的数据类型
    # 删除表
    drop table t1;
    '''
    可以用绝对路径操作不同库的表进行操作
    create table db1.t1(id int);
    '''
    

    针对数据的增删改查(一行行数据)

    # 对数据的操作一定要先有库,有表,最后才能操作
    
    # 增加数据
    insert into t2 values(1,'hz'),(2,'egon');
    
    # 查询数据
    select * from t2;
    
    # 修改数据
    update t2 set name=‘hzdsb’ where id= 1;
    
    # 删除数据
    delete from t2 where id = 1;
    
    # 清空表数据
    delete from t2;
    
    
  • 相关阅读:
    Windows phone 应用开发系列教程(更新中)
    ios实例开发精品文章推荐(8.14)
    Android开发环境——调试器 DDMS相关内容汇总
    docker 发布应用时添加 git revision
    docker环境下数据库的备份(postgresql, mysql)
    golang web 方案
    golang 1.12 自动补全
    区块链简介
    天空的另一半
    Ecto中的changeset,schema,struct,map
  • 原文地址:https://www.cnblogs.com/hz2lxt/p/12811258.html
Copyright © 2020-2023  润新知