zoukankan      html  css  js  c++  java
  • mysql常用操作

    mysql安装

    sudo apt-get install mysql -server mysql -client

    管理服务

    # 启动
    service mysql start
    
    # 停止
    service mysql stop
    
    # 重启
    service mysql restart

    允许远程连接

    # 找到mysql配置文件并修改
    sudo vi /etc/mysql/mysql.conf.d/mysql.cnf
    将bind-address=127.0.0.1 注释
    
    #登录mysql,运行命令
    grant all privileges on *.* to 'root'@'%' identified by 'mysql' with grant option;
    flush privileges;
    
    # 重启mysql
    service mysql restart

    数据

    # 字段类型
    在mysql中包含的数据类型很多,这里主要列出来常用的几种。
    数字 : int, decimal
    字符串:varchar ,text
    日期:datetime
    布尔:bit
    
    # 约束
    主键 primary key
    非空 not nullunique
    默认 default
    外键 foreign key

    使用命令连接操作

    mysql -uroot -p
    回车输入密码登录
    
    #退出登录
    quit或exit
    
    #查看当前版本
    select version();
    
    # 显示当前时间
    select now();

    数据库操作

    # 创建数据库
    create database 数据库名 charset=utf-8;
    
    # 删除数据库
    drop database 数据库名;
    
    # 切换数据库
    use 数据库名字 
    
    # 查看当前选择的数据库
    select database();

    表操作

    # 查看当前数据库所有的表
    show tables
    
    # 创建表
    auto_increment 表示自动增长
    
    create table 表名字(
    id int auto_increment primary key not null,
    name varchar(10) not null,
    age int(3),
    idDelete bit default 1);
    
    
    # 修改表
    # add 增加 change修改 drop删除
    alter table 表名 add|change|drop 列名 类型;
    
    #删除表
    drop table 表名;
    
    # 查看表结构
    desc 表名
    
    #更改表名称
    rename table 原表名 to 新表名
    
    # 查看标的创建语句
    show create table '表名';

    数据操作

    # 查询
    select * from 表名
    
    # 增加
    # 全列插入
    insert into  表名 values(......);
    # 缺省插入
    insert into 表名(列1,...) values(值1,....)
    # 同时插入多条数据
    insert into 表名 values(....),(...)....;
    
    # 修改
    update 表名 set 列1=值1,.....where 条件
    
    # 删除
    delete from 表名 where 条件
    
    # 逻辑删除,本质就是修改操作update
    update 表名 isdelete=1 where 条件;

    备份与恢复

    # 数据备份
    # 进入管理员模式
    sudo -s
    
    # 进入mysql目录
    cd /var/lib/mysql
    
    # 运行mysqldump 命令
    
    mysqldup -uroot -p 数据库名 > /desktop/备份文件.sql;
    # 按提示输入mysql 密码
    
    # 数据恢复
    mysql -uroot -p 数据库名 < /desktop/备份文件.sql;

    条件

    select * from 表名 where 条件;
    
    # 比较运算符
    # 等于 =
    # 大于 >
    # 大于等于 >=
    # 小于 <
    # 小于等于<=
    # 不等于 !=<>
    # 查询编号大于3的学生
    
    select * from 表名 where id>3;
    
    # 逻辑运算符
    andornot 非
    
    # 模糊查询
    like 
    % 表示任意多个字符
    _表示一个任意字符
    列 查询姓张的学生
    
    select * from 表名 wherelike '张%';
    # 匹配两个字姓 张的同学
    select * from 表名 wherelike '张_'; 
    
    # 范围查询
    in 表示在一个非连续的范围内
    
    select * from 表名 where id in(1,2,4,6);
    
    berween...and.....表示一个连续范围内
    
    # 查询2至8的学生
    select * from 表名 where id between 2 and 8;
    
    # 空判断
    is null 判断空
    not null 非空
    
    
    # 优先级
    # 小括号,not,你叫运算符,逻辑运算符
    # and 比 or先运算,如果同时出现并希望先算or,需要结合()使用。

    聚合

    # 聚合提供了5个函数
    count(*) # 表示计算总行数,括号中学星与列名,结果是相同的。
    # 查询学生总数
    select count(*) from 表名;
    
    max(列) # 表示求此列的最大值
    # 查询女生编号最大值
    select max(id) from 表名 where gender=0;
    
    min(列) # 表示求此列最小值
    select min(id) from 表名 where gender=0;
    
    sum(列) # 求此列的和
    
    avg(列) # 求此列的平均值
    # 查询为删除女生的编号平均值
    select avg(id) from 表名 where isdelete=0 and gender=0;

    分组

    # 按照字段分组,表示此字段相同的数据会被放到一个组中
    # 分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
    # 可以对分组后的数据进行统计,做聚合运算
    
    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;
    
    # 分组后的数据筛选
    # having后面的条件运算符与where的相同
    select 列1,列2,聚合... from 表名
    group by 列1,列2,列3...
    having 列1,...聚合...
    
    # 查询男生人数
    select gender as 性别,count(*)
    from students
    group by gender
    having gender=1;
    
    # 对比where与having
    # where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
    # having是对group by的结果进行筛选

    排序

    # 为了方便数据的查看,可以对数据进行排序。
    
    # asc 从小到大
    # desc 从大到小
    select * from 表名 order by 列1 asc|desc,列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;

    分页

    # 当数据量过大时,在一页中查看数据是一件非常麻烦的事情。
    # 语法
    # start 开始  count 结束
    select * from 表名 limit start,count
    
    #示例:分页
    # 已知:每页显示m条数据,当前显示第n页
    # 求总页数:此段逻辑后面会在python中实现
    #  查询总条数p1
    #  使用p1除以m得到p2
    #  如果整除则p2为总数页
    #如果不整除则p2+1为总页数
    #求第n页的数据
    
    select * from students
    where isdelete=0
    limit (n-1)*m,m

    外键

    create table scores(
    id int primary key auto_increment,
    stuid int,
    subid int,
    score decimal(5,2),
    foreign key(stuid) references students(id),
    foreign key(subid) references subjects(id)
    );

    连接

    """
    连接查询分类如下:
        表A inner join 表B:表A与表B匹配的行会出现在结果中
        表A left join 表B:表A与表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的    数据使用null填充
        表A right join 表B:表A与表B匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充
    在查询或条件中推荐使用“表名.列名”的语法
    如果多个表中列名不重复可以省略“表名.”部分
    如果表的名称太长,可以在表名后面使用' as 简写名'' 简写名',为表起个临时的简写名称
    """
    
    
    # 查询每个学生每个科目的分数
    select students.sname,subjects.stitle,scores.score
    from scores
    inner join students on scores.stuid=students.id
    inner join subjects on scores.subid=subjects.id;          
    # 查询学生的姓名、平均分
    select students.sname,avg(scores.score)
    from scores
    inner join students on scores.stuid=students.id
    group by students.sname;
    
    # 查询男生的姓名,总分。
    select students.sname,avg(scores.score)
    from scores
    inner join students on scores.stuid=students.id
    where students.gender=1
    group by students.sname;
    
    # 查询科目的名称、平均分
    select subjects.stitle,avg(scores.score)
    from scores
    inner join subjects on scores.subid=subjects.id
    group by subjects.stitle;
    
    # 查询未删除科目的名称、最高分、平均分
    select subjects.stitle,avg(scores.score),max(scores.score)
    from scores
    inner join subjects on scores.subid=subjects.id
    where subjects.isdelete=0
    group by subjects.stitle;

    视图

    """ 
        对于复杂的查询,在多次使用后,维护是一件非常麻烦的事情
        解决:定义视图
        视图本质就是对查询的一个封装
        定义视图
    """
    create view stuscore as 
    select students.*,scores.score from scores
    inner join students on scores.stuid=students.id;
    
    #视图的用途就是查询
    
    select * from stuscore;
    # 事物
    # 要求表的类型必须是innodb或bdb类型,才可以对此表使用事务。
    开启begin;
    提交commit;
    回滚rollback;

     

  • 相关阅读:
    关于content-type请求头的说明
    RabbitMQ
    tornado
    flask总结之session,websocket,上下文管理
    爬虫相关问题总结
    爬虫之scrapy框架
    爬虫之Selenium模块
    爬虫之Beautifulsoup及xpath
    爬虫之requests
    SQLAlchemy
  • 原文地址:https://www.cnblogs.com/zhangguanghe/p/9064359.html
Copyright © 2011-2022 走看看