• MySQL的基本操作


    一、mysql的启动和连接

      1.、服务控制(启动、查看状态、停止、重启,重载)

         两种方法(Ubuntu系统)

      • sudo /etc/init.d/mysql start | status | stop | restart | reload
      • service mysql start | status | stop | restart | reload

      2 、连接数据库

      • mysql -h主机地址 -u用户名 [-P3306] -p密码

    二、库的管理

      1、创建库(指定字符集)

        create database 库名;

        create database 库名 default charset = utf8 #指定字符集

      2、查看库的字符集

        show create database 库名;

      3、查看当前所在库

        select database();

      4、切换库

        use 库名;

      5、查看库已有表

        show tables;

      6、删除库

        drop database 库名;

    三、表管理(表的创建、查看、删除)

      1、创建表

        create table 表名(字段名1 数据类型1,字段2 数据类型2...);

        create table 表名(字段名1 数据类型1,字段2 数据类型2...)default charset = utf8;

      2、查看表的字符集和存储引擎

        show create table 表名;

      3、查看表结构

        desc 表名;

      4、删除表

        drop 表名;

    四、表字段管理

      1、添加字段(add)

        alter table 表名 add 字段名 数据类型;  #默认添加到末尾

        alter table 表名 add 字段名 数据类型 first;  #添加到第一个字段

        alter table 表名 add 字段名 数据类型 after 字段名;  # 添加到指定字段后面

      2、修改字段数据类型

        alter table 表名 modify 字段名 新数据类型;

        注: 修改数据类型时会受到表中原有数据类型的限制

      3、修改字段名

        alter table 表名 change 旧名 新名 数据类型;

      4、删除字段

        alter table 表名 drop 字段名;

      5、修改表名 

        alter table 表名 rename 新表名;

    五、表记录操作(表内容的增、删、改、查)

      1、插入表记录  

        insert into 表名 values(记录1的字段的值),(记录2的字段的值)...;

        insert into 表名(指定要插入的字段名) values(记录1的字段的值),(记录2的字段的值)...;

        注意: 没有指定插入字段名的话,后面必须插入全部字段的值,如果指定了只需插入指定字段值即可。

      2、查询表记录

        select * from 表名;  # 查看所有的表记录

        select 字段1,字段2...... from 表名;  # 查看指定字段记录

        注:其它更复杂的查询后面逐步说明

      3、删除表记录

        delete from 表名 where 条件;

        注:delete 语句后面如果不加where子句,会将表中所有记录删除。

      4、更新表记录

        update 表名 set 字段1=值1,字段2=值2...... where 条件;

        注意:update 语句后面如果不加where子句,会将表中所有记录修改。

    进阶查询部分

    PS:此表作为下面示例所用(表名:sanguo)

     id name gongji fangyu sex country
    1 诸葛亮 120 20 蜀国
    2 司马懿  119    25 魏国
    3 关5羽 188 60 蜀国
    4 赵云6 200 66 魏国
    5 孙权 100 60 吴国
    6 貂蝉 666 10 魏国
    7 NULL 1000 99 魏国
    8   1005 88 蜀国
    9 9周瑜 80 100 吴国
    10 黄忠 130 80 蜀国
    11 孙策 110 90 吴国
    12 荀粲 80 100 魏国
    13 华佗 60 200 NULL

    六、where 子句

      ps:配合查询、修改、删除操作

      语法格式(以查询为例):

        select * from 表名 where 条件;

      1、where 子句后的运算符操作

        数值比较运算符:=、!=、>、>=、<、<=
        字符比较运算符:=、!=
        示例:
          找出攻击力高于150的英雄和攻击值
          select name,gongji from sanguo  where gongji > 150;
          找出防御力不等于100的英雄信息
          select * from sanguo where fangyu != 100;
      2、逻辑比较
         运算符:and  、or
         and:两个或多个条件需要同时满足
         or:两个或多个条件满足一条即可
        示例:
          找出攻击值大于200的蜀国英雄的名字和攻击值
          select name,gongji from sanguo where gongji > 200 and country = "蜀国";  
          将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60
          update sanguo set gongji=100 where gongji=110;
      3、范围内比较
        between  and 、in、not in
        语法:
          字段名 between 值1 and 值2
          字段名 in 值1 或 字段名 in (值1,值2...)
          字段名 not in 值1
        示例:
          
          查找攻击值在100-200之间的蜀国英雄信息
           select * from sanguo where gongji between 100 and 200;
          找到蜀国和吴国以外国家的女英雄信息
          select * from sanguo where sex="女" and country not in ("蜀国","吴国");
      4、查询空
        is null 、is not null
        示例:
          查找姓名为NULL的蜀国女英雄信息
           select * from sanguo where name is null and sex="女";
          查找姓名为""的英雄的id、姓名和国家
          select * from sanguo where name="";
          注意:null 为空值,必须用 is 或者 is not 去匹配,而""为空字符串,用 = 或者 != 去匹配。
      5、模糊比较
        语法:where 字段名 like 表达式;
          表达式:
            _ : 匹配单个字符
            % : 匹配0到多个字符(null不会被匹配)
        示例: 
          匹配名字中至少有两个字的英雄
          select * from sanguo where name like "_%_";
          匹配名字为三个字的英雄
          select * from sanguo where name like "___";
          匹配姓赵的英雄
          select * from sanguo where name like "赵%";
     
      6、正则匹配查询 regexp
        语法:where 字段名 regexp 正则表达式;
        常用的正则表达式符号:
          ^ : 以...开头
          $ : 以...结尾
          .  : 匹配任意一个字符
          [] : 包含...内容
          *  : 匹配前面的子表达式零次或多次
     
        示例:
          匹配名字中带数字的英雄信息
          select * from sanguo where name regexp "[0-9]";
          匹配名字中以数字开头的记录
          select * from sanguo where name regexp "^[0-9]";
          匹配名字中以数字结尾的记录
          select * from sanguo where name regexp "[0-9]$";
          匹配以 司 开头,以 懿 结尾的记录
          select * from sanguo where name regexp "^司.*懿$";
     
    七、order by子句(排序)
      语法格式:order by 字段名 排序方式;
      排序方式:asc(默认):升序  desc:降序
      示例:
        将英雄按防御值从低到高排序
        select * from sanguo  order by fangyu asc;  #asc 可不写
        将蜀国英雄按攻击值从高到底排序
        select * from sanguo where country = "蜀国" order by gongji desc;
        将魏蜀两国的男英雄中名字中为三个字的英雄按防御值升序排列
        select * from sanguo
           where sex = "男" and country in ("魏国","蜀国") and name like "___"
           order by fangyu;
    八、limit子句
      作用:用于限制显示查询的记录条数
      语法:limit m,n;
        m:表示从第m+1条开始显示记录
        n:表示显示多少条记录
      # m可以省略
      # 永远放在SQL语句的最后面
      示例:
        查找防御值倒数第2名到倒数第4名的蜀国英雄记录
        select * from sanguo where country = "蜀国" order by fangyu limit 1,3;
        查找攻击值前3名且名字不为空值的蜀国英雄的姓名、攻击值和国家
        select name,gongji,country from sanguo
            where country = "蜀国" and name is not null 
            order by gongji desc limit 3;
    九、聚合函数
      avg(字段名):求字段的平均值
      sum(字段名):求和
      max(字段名):求最大值
      min(字段名):求最小值
      count(字段名):统计该字段记录的条数
      示例:  
        找到最强攻击值是多少
        select max(gongji) as best from sanguo;
        注:这里的as 相当于设置一个别名best,可以省略。
     
        统计一下id,name两个字段分别有多少记录
        select count(id),count(name) from sanguo;
        注:空值NULL不会被统计,空字符串""会被统计  
       
        统计蜀国英雄中攻击值大于200的英雄的数量
        select count(*) from sanguo where country="蜀国" and gongji > 200; 
        # count(*)的意思是指被筛选出来的记录只要有一个字段不是空值就会被统计
      
    十、group by子句(先分组,再聚合)
      作用:给查询的结果进行分组
      语法:group by 字段名;
      
      示例:
        统计sanguo表中一共有哪几个国家
        select country from sanguo group by country;
     
        计算所有国家的平均攻击力
        select countr,avg(gongji) from sanguo group by country;
        # 先分组,在求分组后每组的(国家)平均攻击力,最后将国家去重显示出来。
     
        查找所有国家中,英雄数量最多的前2名的国家的名称及英雄数量
        select country,count(*) as 英雄数量 from sanguo
            group by country  order by  英雄数量 desc limit 2;
        # 可以使用中文作为别名
        
    十一、having  
      
     
      示例: 
        找出平均攻击力大于105的国家的前2名,显示国家名称和平均攻击力
        select country,avg(gongji) from sanguo
            group by country having avg(gongji) > 105
            order by avg(gongji) desc limit 2;
        注:1.having 语句通常与group by 语句联合使用,用来过滤有group by语句返回的记录集
          2.having语句弥补了where条件子句不能与聚合函数联合使用的不足,where操作的
          是表中实际的字段,having操作的是集合函数生成的显示列
     
    十二、distinct
      作用:不显示字段的重复值 
      示例:
        sanguo表中一共有哪些个国家
        select distinct country from sanguo;
     
        计算蜀国一共有多少个英雄
        select count(distinct name) from sanguo where country = "蜀国";
     
          注:1.distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重
            2.distinct不能对任何字段做聚合处理
     
    十三、查询表记录时可以做数学运算
       + 、-、 *、/、 %
     
      示例:
         查询时显示所有英雄的攻击力 * 10
        select name,gongji*10,country from sanguo;
     
    总结(执行顺序)
     
      1、where ...
      2、group by ...
      3、select ... 聚合函数 from 表名
      4、having ...
      5、order by ...
      6、limit ...
     
    约束
     
    作用:
      为了保证数据的完整性、一致性、有效性,可以限制无效的数据插入到数据表中
     
    约束分类:
      默认约束(default)
         作用:在插入记录时,如果不给该字段赋值,则使用默认值
         格式:
          字段名 数据类型 default 默认值,
     
      非空约束
         作用:不允许该字段的值有空值NULL记录
         格式:
          字段名 数据类型 not null
     
       
      示例:
        创建一张表,name字段的默认值是“张三”
        create table t1(name varchar(20) default "张三", age tinyint unsigned);
           
        向表中添加一个字段,值不能为空
        alter table t1 add id int not null;
     
     
    索引
     
    定义:
      对数据库中表的一列或者多列的值进行排序的一种结构(MySQL中索引用Btree方式)
     
    索引的优缺点:
       优点:
        可以加快数据的检索速度
     
      缺点:
         当对表中的数据进行增加、修改、删除的时候,索引需要动态维护,降低了数据的维护速度
         索引需要占用物理存储空间(数据库目录/var/lib/mysql)
     
      创建索引:
        # name字段
         create index name on t1(name);
      
      ps:可以开启性能测试,有索引和无索引的检索用时区别
        1.开启性能测试
          show variables like "%pro%";
             set profiling = 1;
         2.查看性能分析结果      
          show profiles;
          # 与没有索引的进行对比
        3.关闭性能测试
          set profiling = 0;
  • 相关阅读:
    jekyll简单使用
    三、ansible简要使用
    四、ansible主机组定义
    项目中远程连接404 NOT FOUND问题的原因以及解决办法(这里只涉及我遇到的问题)
    AS3中的位操作
    AS3中is和as操作符的区别
    static 函数和普通函数的区别
    [译] SystemTap
    2017-09-17 python 学习笔记
    xargs 命令使用小记
  • 原文地址:https://www.cnblogs.com/hxgoto/p/8992440.html
Copyright © 2020-2023  润新知