zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    AS将一个项目导入到另一个项目中
    Android Studio出现:Cause: unable to find valid certification path to requested target
    小米手机Toast带app名称
    PopupWindow 点击外部区域无法关闭的问题
    EditText inputType类型整理
    Fragment通过接口回调向父Activity传值
    Android selector一些坑
    Installation failed with message Failed to commit install session 634765663 with command cmd package
    旷视上海研究院机器人方向招聘
    语义SLAM的数据关联和语义定位(四)多目标测量概率模型
  • 原文地址:https://www.cnblogs.com/hxgoto/p/8992440.html
Copyright © 2011-2022 走看看