MySQL基础

  1. SQL通用语法

    • SQL语句和以携程单行或多行,以分号结尾

    • MySQL数据库的SQL语句不区分大小写,关键字一般大写(本文中个人习惯使用小写)。

    • 注释

      #单行注释
      -- 单行注释, -- 后有空格
      /* 多行注释 */
      
  2. SQL分类

    • DDL:数据定义语言。定义数据库对象:数据库、表、列
    • DML:数据操作语言。增删改
    • DQL:数据查询语言。查询记录
    • DCL:数据控制语言。访问权限、安全级别、创建用户...
  3. DDL

    • DDL操作数据库

      #查询全部数据库
      show databases;
      
      #创建数据库
      create database 数据库名称;
      create database if not exists 数据库名称;
      
      #删除数据库
      drop database 数据库名称;
      drop databases if not exists 数据库名称;
      
      #使用数据库
      use 数据库名称;
      
      #查看当前使用中的数据库,函数调用
      select database();
      
    • DDL操作表

      #查询数据库下所有表
      show tables;
      
      #查询表结构
      desc 表名称;
      
      #创建表
      create table 表名 (
      	字段名 数据类型,
          字段名 数据类型,
          ...
          字段名 数据类型	#最后一行末尾不加逗号
      );
      
      #删除表
      dorp table 表名;
      drop table if exists 表名;
      
      #修改表名
      alter table 表名 rename to 新表名;
      #添加一列
      alter table 表名 add 列名 数据类型;
      #修改数据类型
      alter table 表明 modify 列名 新数据类型;
      #同时修改列名和数据类型
      alter table 表名 change 列名 新列名 新数据类型;
      #删除列
      alter table 表明 drop 列名;
      
  4. DML

    #给指定列添加数据
    insert into 表名(列名1,列名2,...) values(值1,值2,...);
    
    #添加一条完整数据
    insert into 表名(值1,值2...);
    
    #批量添加数据
    insert into 表名(列名1,列名2...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
    insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
    
    #修改数据
    update 表名 set 列名1=值1,列名2=值2,… [where 条件] ;
    
    #删除数据
    delete from 表名 [where 条件];
    
  5. DQL

    • 查询完整语法

      select
      	字段列表
      from
      	表名列表
      where
      	条件列表
      group by
      	分组字段
      having
      	分组后条件
      order by
      	排序字段
      limit
      	分页限定
      
    • 基础查询

      #查询一列
      select 字段列表 from 表名;	-- 使用 * 作为字段列表查询全部数据
      
      #去除重复记录
      select distinct 字段列表 from 表名;
      
      #别名
      as		-- 可省略
      #举例
      select student_name as name,student_gender as gender from student;
      select name,gender,score from student;	-- 起别名之后的sql中可直接使用别名代替原字段名
      
    • 条件查询

      select 字段名 from 表名 where 条件列表;
      
      • 条件运算符

        符号 功能
        > 大于
        < 小于
        >= 大于等于
        <= 小于等于
        = 等于
        <> 或 != 不等于
        between...and... 再某个范围之内,闭区间
        in(字段值列表) 包含,用于代替多个值比较的逻辑或
        like 含占位符的字段值 模糊查询,详见【模糊查询】
        is null 为空
        is not null 非空
        and 或 && 逻辑且
        or 或 || 逻辑或
        not 或者 ! 逻辑非
    • 模糊查询

      /*
      	占位符:
      		_ : 代表任意单个字符
      		% : 代表任意个数字符
      */
      
      #模糊查询
      select 字段列表 from 表名 where 字段名 like 含占位符的字段值;
      
    • 排序查询

      /*
      	ASC : 升序排序(默认)
      	DESC : 降序排序
      */
      
      #排序查询
      select 字段列表 from 表名 order by 排序字段1 [排序方式1],排序字段2 [排序方式2];
      
    • 聚合函数

      • 聚合函数分类

        函数名 功能
        count() 统计数据条数
        max() 最大值
        min() 最小值
        sum() 求和
        avg() 平均值
      • 聚合函数语法

        #聚合函数,null不参与聚合函数运算
        select 聚合函数名(字段名) from 表名;
        
    • 分组查询

      分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

      #分组查询
      select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
      
      ##举例
      #查询男同学和女同学各自的数学平均分
      select sex, avg(math) from stu group by sex;
      select name, sex, avg(math) from stu group by sex; -- 这里查询name字段就没有任何意义
      #查询男同学和女同学各自的数学平均分,以及各自人数
      select sex, avg(math),count(*) from stu group by sex;
      #查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
      select sex, avg(math),count(*) from stu where math > 70 group by sex;
      #查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
      select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
      
    • 分页查询

      分页查询的索引从0开始

      起始索引 = (当前页码 - 1) * 每页显示的条数

      #分页查询
      select 字段列表 from 表名 limit 起始索引,查询条目数量;
      
      ##举例
      #从0开始查询,查询3条数据
      select * from stu limit 0 , 3;
      #每页显示3条数据,查询第1页数据
      select * from stu limit 0 , 3;
      #每页显示3条数据,查询第2页数据
      select * from stu limit 3 , 3;
      #每页显示3条数据,查询第3页数据
      select * from stu limit 6 , 3;
      
  6. MySQL数据类型整合

    • 数值类型

      数据类型 大小 描述 备注 示例
      TINYINT 1 byte 小整数值
      SMALLINT 2 bytes 大整数值
      MEDIUMINT 3 bytes 大整数值
      INT或INTEGER 4 bytes 大整数值 age int
      BIGINT 8 bytes 极大整数值
      FLOAT 4 bytes 单精度浮点数值
      DOUBLE 8 bytes 双精度浮点数值 score double(总长度,小数点后保留的位数) 0~100 2 score double(5,2)
      DECIMAL 小数值
    • 日期和时间类型

      数据类型 大小 描述 备注 示例
      DATE 3 日期值 birthday date
      TIME 3 时间值或持续时间
      YEAR 1 年份值
      DATETIME 8 混合日期和时间值
      TIMESTAMP 4 混合日期和时间值,时间戳
    • 字符串类型

      数据类型 大小 描述 备注 示例
      CHAR 0-255 bytes 定长字符串 name char(10) 10个字符空间 存储的性能高 浪费空间 “张三”
      VARCHAR 0-65535 bytes 变长字符串 name varchar(10) 2个字符空间 存储性能低 节约空间 “张三”
      TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
      TINYTEXT 0-255 bytes 短文本字符串
      BLOB 0-65 535 bytes 二进制形式的长文本数据
      TEXT 0-65 535 bytes 长文本数据
      MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
      MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
      LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
      LONGTEXT 0-4 294 967 295 bytes 极大文本数据
posted @ 2022-08-09 15:21  Dandelion_000  阅读(54)  评论(0编辑  收藏  举报