zoukankan      html  css  js  c++  java
  • python数据库MySQL第一天

    数据库

    着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题,

    计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统

    数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性

    分类

    • 文档型,如sqlite,就是一个文件,通过对文件的复制完成数据库的复制
    • 服务型,如mysql、postgre,数据存储在一个物理文件中,但是需要使用终端以tcp/ip协议连接,进行数据库的读写操作

    E-R模型

    当前物理的数据库都是按照E-R模型设计

    E,entry,实体,类比于python的对象,一个实体转换为数据库中的一个表

    R,relationship,关系,关系描述两个实体的对应规则,一对一,一对多,多对多

    关系转换为数据库中的一个列,在关系型数据库中一行就是一个对象

    三范式

    对设计数据库提出的一些规范

    • 第一范式(1NF):列不可拆分
    • 第二范式(2NF):唯一标识
    • 第三范式(3NF):引用主键

     

    MySQL的安装

    包括Windows、Ubuntu和Navicat数据库管理工具的安装包压缩版 链接:https://pan.baidu.com/s/1PpzA31xxfdMCJU_5pX6Tdg 密码:xeqi

    如何让虚拟机中的乌班图也能跟Windows共享文件呢?采用VMware tools工具。详情见链接VMware Tools安装方法和共享文件夹设置方法

    安装好,用Navicat测试

    图形界面操作

    新建连接

    连接右击→新建数据库→字符集和排序规则按下图选好

    表操作 

    想改表操作→表→设计表 一般会预留几个栏位

    数据操作 

    命令行操作

    使用命令连接

    打开终端,运行命令 

    # 使用命令连接
    mysql -uroot -p
    回车后输入密码
    # 退出
    quit
    
    cmd控制台:
    进入mysql所在的bin目录
    mysqldump -u root -p 数据库 [表名1 表名2..] > 文件路径.sql
    
    备份文件恢复我们的数据
    cmd控制台
    mysql -uroot -p py31 < 文件路径.sql
    
    # 备份与恢复
    # 数据备份
    # 进入超级管理员
    sudo -s 
    # 进入mysql库目录
    cd /var/lib/mysql
    # 运行 mysqldump命令
    mysqldump -uroot -p 数据库名 > ~/Desktop/备份文件.sql
    根据提示输入mysql的密码
    # 数据恢复
    # 连接mysqk,创建数据库
    # 退出连接,执行下面命令
    mysql -uroot -p 数据库名 < ~/Desktop/备份文件.sql
    根据提示输入mysql的密码
    
    # 创建数据库
    create database 数据库名 charset=utf8;
    # 删除数据库
    drop database 数据库名;
    # 切换数据库
    use 数据库名;
    #查看当前选择的数据库
    select database();
    
    # 表操作
    # 查看当前数据库中所有表
    show tables;
    # 创建表 auto_increment自动增长
    create table 表名(列及类型);
    create table students(id int auto_increment primary key, sname varchar(10) not null);
    # 修改表
    alter table 表名 add|change|drop 列名 类型;
    alter table students add birthday datatime;
    # 删除表
    drop table 表名;
    # 查看表结构
    desc 表名;  describe
    # 更改表名称
    rename table 原表名 to 新表名;
    # 查看表的创建语句
    show create table '表名';
    
    # 数据操作
    # 查询
    select * from 表名;
    #增加 只要插入就会多一行
    全列插入: insert into 表名 values(...);
    eg: insert into students values(0,'郭靖','1991-1-1',0);
    缺省插入: insert into 表名(列1,...) values(值1,...);
    insert into students(name) values('黄蓉'); 其余部分有默认值,不用再给值
    insert into students(gender,name) values(0,'小龙女');
    同时插入多条数据: insert into 表名 values(...),(...)...;
    或insert into 表名(列1,...) values(值1,...),(值1,...)...;
    eg: insert into students(name) values('杨过'),('雕'),('郭襄');
    # 主键列是自动增长,但在全列插入时需要站位,通常用0,插入成功后以实际数据为准
    # 修改 针对已有的行修改内容
    update 表名 set 列1=值1,... where 条件;
    # 删除
    delete from 表名 where 条件;
    # 逻辑删除,本质是修改操作update
    alter table students add isdelete bit default 0;
    # 如果需要删除
    update students isdelete=1 where ...;
    
    查询
    select * from 表名;
    select * from 表名 where 条件;
    
    from关键字后面写表名,表示数据来源于是这张表
    select后面写表中的列名,如果是*表示在结果中显示表中所有列
    在select后面的列名部分,可以使用as为列起别名,这个别名出现在结果集中
    如果要查询多个列,之间使用逗号分隔
    
    消除重复行
    select distinct gender from students
    
    比较运算符
    等于=
    大于>
    大于等于>=
    小于<
    小于等于<=
    不等于!=或<>
    查询编号大于3的学生
    select * from students where id>3;
    查询编号不大于4的科目
    select * from subjects where id<=4;
    查询姓名不是“黄蓉”的学生
    select * from students where sname!='黄蓉';
    查询没被删除的学生
    select * from students where isdelete=0;
    
    逻辑运算符
    and
    or
    not
    查询编号大于3的女同学
    select * from students where id>3 and gender=0;
    查询编号小于4或没被删除的学生
    select * from students where id<4 or isdelete=0;
    
    模糊查询
    like
    %表示任意多个任意字符
    _表示一个任意字符
    查询姓黄的学生
    select * from students where sname like '黄%';
    查询姓黄并且名字是一个字的学生
    select * from students where sname like '黄_';
    查询姓黄或叫靖的学生
    select * from students where sname like '黄%' or sname like '%靖%';
    
    范围查询
    in表示在一个非连续的范围内
    查询编号是1或3或8的学生
    select * from students where id in(1,3,8);
    between ... and ...表示在一个连续的范围内
    查询学生是3至8的学生
    select * from students where id between 3 and 8;
    查询学生是3至8的男生
    select * from students where id between 3 and 8 and gender=1;
    
    空判断
    注意:null与''是不同的
    判空is null
    查询没有填写地址的学生
    select * from students where hometown is null;
    判非空is not null
    查询填写了地址的学生
    select * from students where hometown is not null;
    查询填写了地址的女生
    select * from students where hometown is not null and gender=0;
    
    优先级
    小括号,not,比较运算符,逻辑运算符
    and比or先运算,如果同时出现并希望先算or,需要结合()使用
    
    分组
    按照字段分组,表示此字段相同的数据会被放到一个组中
    分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
    可以对分组后的数据进行统计,做聚合运算
    语法:
    select 列1,列2,聚合... from 表名 group by 列1,列2,列3...
    查询男女生总数
    select gender as 性别,count(*) from students group by gender;
    查询各城市人数
    select hometown as 家乡,count(*) from students group by hometown;
    
    分组后的数据筛选
    语法:
    select 列1,列2,聚合... from 表名 group by 列1,列2,列3... having 列1,...聚合...
    having后面的条件运算符与where的相同
    查询男生总人数
    方案一
    select count(*) from students where gender=1;
    -----------------------------------
    方案二:
    select gender as 性别,count(*) from students group by gender having gender=1;
    
    对比where与having
    where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
    having是对group by的结果进行筛选
    
    排序
    为了方便查看数据,可以对数据进行排序
    语法:
    select * from 表名 order by 列1 asc|desc,列2 asc|desc,...
    将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
    默认按照列值从小到大排列
    asc从小到大排列,即升序
    desc从大到小排序,即降序
    查询未删除男生学生信息,按学号降序
    select * from students where gender=1 and isdelete=0 order by id desc;
    查询未删除科目信息,按名称升序
    select * from subject where isdelete=0 order by stitle;
    
    获取部分行
    当数据量过大时,在一页中查看数据是一件非常麻烦的事情
    语法
    select * from 表名
    limit start,count
    从start开始,获取count条数据
    start索引从0开始
    示例:分页
    已知:每页显示m条数据,当前显示第n页
    求总页数:此段逻辑后面会在python中实现
    查询总条数p1
    使用p1除以m得到p2
    如果整除则p2为总数页
    如果不整除则p2+1为总页数
    求第n页的数据
    select * from students where isdelete=0 limit (n-1)*m,m
    
    完整的select语句
    select distinct *
    from 表名
    where ....
    group by ... having ...
    order by ...
    limit star,count
    执行顺序为:
    from 表名
    where ....
    group by ...
    select distinct *
    having ...
    order by ...
    limit star,count
    实际使用中,只是语句中某些部分的组合,而不是全部

    windows下对mysql进行数据备份和恢复 见mysql在Windows下使用mysqldump命令手动备份数据库和自动备份数据库

  • 相关阅读:
    基于ModBus-TCP/IT 台达PLC 通讯协议解析
    TNS-12541: TNS: 无监听程序 解决方案
    一个很好的ping端口的工具
    上位机(开发)
    无名
    网站部署
    cordova 开发
    mono 开发
    调用 浏览器 插件
    MacBook 配置
  • 原文地址:https://www.cnblogs.com/wangjinliang1991/p/9898893.html
Copyright © 2011-2022 走看看