zoukankan      html  css  js  c++  java
  • 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;
    
    
  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/hz2lxt/p/12811258.html
Copyright © 2011-2022 走看看