前端也要学的Mysql入门教程

376 阅读5分钟
  1. MySQL的环境准备(win11环境)

    1. 安装mysql

      官网:dev.mysql.com/downloads/f…

    1. mysql启动

      1. 在系统命令行中(管理员身份打开)
      2.     启动mysql
      3.     net start mysql80
      4.     关闭mysql
      5.     net stop mysql
    2. 配置环境变量

      找到安装mysql的位置,复制路径

找到系统变量->path,点击新建,然后粘贴复制的路径

  • 全部点击确定
    1. 测试

      1.     在终端中输入
      2.     mysql -u root -p
  •   连接成功
  1. 表格结构

    1.   基本数据类型

          | 类型 | 含义 |

      | -------- | ---- | | INT | 整型 | | VARCHAR | 字符串 | | DOUBLE | 浮点型 | | DATETIME | 时间类型 | | BIGINT | 长整型 |

  1. CURD

    英文中文SQLHTTP
    CREATE增加INSERTPOST
    READ读取SELECTGET
    UPDATE更新UPDATEPOST
    DELETE删除DELETEDELETE
    1.   CURD

    1.   创建表格

    CREATE TABLE `user`( //创建名叫user的表格
    `id` INT(10)NOT NULL,//创建字段
    `mobile` VARCHAR(11) NOT NULL,
    `nickname` VARCHAR(40) NOT NULL,
    `gmt_created` datetime ,
    `gmt_modified` datetime NOT NULL,
    PRIMARY KEY ( `id` )//约定主键
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;//约定存储引擎和编码格式
    
    1.   删除表格

    drop table table_name;
    //都行
    DROP TABLE IF EXISTS table_name;
    
    1.   INSERT

      后续案例所用表格

    INSERT INTO table_name(field1,field2,...fieldN)
    VALUES
    (value1,value2,...valueN);
    //example
    INSERT INTO
      `user` (`id`, `mobile`, `nickname`, `gmt_created`)
    VALUES
      (1, '13426069530', '叶冰', now());
    
    //简化
    INSERT INTO table_name
    VALUES
    (value1,value2,...valueN);
    
    //批量
    INSERT INTO table_name
    VALUES
    (value1,value2,...valueN),
    (value1,value2,...valueN);
    
    1.   SELECT

    SELECT field1,field2,.... FROM table_name;
            //字段                   //表名
            
    //example
    SELECT
      id,
      hero_name
    FROM
      timi_adc;
      
    //查询全部字段
    SELECT * FROM  table_name;    
    
    1.   WHERE

    SELECT * FROM table_name WHERE condition;
    
    //example
    SELECT*
    FROM
      timi_adc
    where
      win_rate > 0.5;
    
    1.   LIMIT

    SELECT * FROM table_name LIMIT parameter;
    
    //查询第6到第11SELECT*
    FROM
      timi_adc
    LIMIT
      5, 6;// 第一个参数是从哪一行开始,第二个参数是数几个
     
     //查询前5SELECT*
    FROM
      timi_adc
    LIMIT
      5;
      
     //查询第五行
     SELECT*
    FROM
      timi_adc
    LIMIT
      4, 1;
    
    1.   ORDER BY

    SELECT * FROM table_name ORDER BY field_name;
    
    //按照win_rate排序
    SELECT*
    FROM
      table_name 
    ORDER BY
      win_rate;
      
    //按照win_rate排降序  默认是ASC
    SELECT*
    FROM
      timi_adc
    ORDER BY
      win_rate DESC;
    
    1.   UPDATE

    UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    
    //example
    UPDATE
      timi_adc
    SET
      ban_rate = 0.01
    WHERE
      hero_name = '艾琳';
    
    1.   DELETE

    DELETE FROM table_name [WHERE Clause]
    
    //example
    //删除id=4的数据
    delete from user where id=4;
    //删除user所有数据
    delete from user;
    
    1.   优化查询

    1.   LIKE

      %的位置会决定搜索结果的不同,%孙%示这个字符串含孙,孙%表示这个字符串以孙开头,%孙'表示这个字符串以孙结尾,

    SELECT * FROM table_name WHERE condition LIKE condition;
    
    //包含孙
    SELECT*
    FROM
      timi_adc
    WHERE
      hero_name LIKE '%孙%';
     
    //孙开头
     SELECT*
    FROM
      timi_adc
    WHERE
      hero_name LIKE '孙%';
      
    //孙结尾
    SELECT*
    FROM
      timi_adc
    WHERE
      hero_name LIKE '%孙';
     
     //忘记第一个字
     SELECT*
    FROM
      timi_adc
    WHERE
      hero_name LIKE '_尚香';
    
    1.   AND/OR

    SELECT * FROM table_name WHERE conditionA AND/OR condtionB;
    

      比如我们要查询timi adc表中胜率为百分之50%-51%或者胜率低于47%的英雄,那么我们可以这么写SQL:

    SELECT*
    FROM
      timi_adc
    WHERE
      win_rate > 0.5AND win_rate < 0.51OR win_rate < 0.47;
    
  • 有时也需要加()分割
  • SELECT*
    FROM
      timi_adc
    WHERE
      (
        win_rate > 0.5OR win_rate < 0.47
      )
      AND win_rate < 0.51;
    
    1.   IN/NOT IN

  • SELECT * FROM table_name WHERE column IN (condtionA,condtionB);
    //要查询fever为T0和T3的
    SELECT*
    FROM
      timi_adc
    WHERE
      fever IN ('T0', 'T3');
    
  • 等价于

  • SELECT*
    FROM
      timi_adc
    WHERE
      fever = 'T0'OR fever = 'T3';
    
  •   NOT IN子句就是在IN前面加一个NOT,NOT就是非的意思,相当于否定这个条件,比如我们要查询timi adc表中热度为TO以外英雄,那么我们可以这么写SQL:

  • SELECT*
    FROM
      timi_adc
    WHERE
      fever NOT IN ('T0');
    
  •   NOT LIKE子句就是在LIKE子句前面加一个NOT,和NOT IN的用法很相似,比如我们要查询所有名字里面不带孙的英雄,那么我们可以这么写:

  • SELECT*
    FROM
      timi_adc
    WHERE
      hero_name NOT LIKE '%孙%';
    
    1.   NULL/NOT NULL

  • SELECT field_name1,field_name2
    FROM table_name
    WHERE field_name2 IS NOT NULL/IS NULL;
    

  • 我们根据语法,想要查询id,mobile,其中mobile不为NULL的数据,可以这么写SQL语句:
  • SELECT
      id,
      mobile
    FROM
      student
    WHERE
      mobile IS NOT NULL;
    
    1.   MySQL字符串处理

    1.   CONCAT函数

  • SELECT column_name1,CONCAT(column_name2,str,column_name3),column_name4 FROM table_name;
    
  • 比如现在我们想查询timi adc表中英雄的id,以及名字+胜率,我们可以利用concati函数,把结果的可阅读性变得更好
  • SELECT
      id,
      concat(hero_name, '的胜率是', win_rate)
    FROM
      timi_adc;
    
  •   配合WHERE语句
  •   我们同样可以配合WHERE语句来使用CONCAT查询,比如在上面的例子中,我们想查询d=3的数据,那么我们可以这么写:
  • SELECT
      concat(hero_name, '的胜率是', win_rate)
    FROM
      timi_adc
    WHERE
      id = 3;
    
  • 别名
  •   我们优化拼接的结果,给他起一个别名,比如我希望查询结果的列名叫result,那么我们可以这么写:
  • SELECT
      concat(hero_name, '的胜率是', win_rate) as result
    FROM
      timi_adc
    WHERE
      id = 3;
    
    1.   TRIM函数

  •   TRIM()函数的语法非常简单,就是把需要去除空格的数据放在TRIM()函数的空格里面,比如我们现在向timi adc中插入两条新的数据:
  • INSERT INTO
      timi_adc
    VALUES
      (
        20,
        '      鲁班七号',
        'T1      ',
        0.5111,
        0.2300,
        0.0944,
        now(),
        now()
      ),
      (
        21,
        '     后羿      ',
        'QT1Q',
        0.5111,
        0.2300,
        0.0944,
        now(),
        now()
      );
    
  •   现在我们想要查询d为20的姓名和热度,我们期望去棹数据中的空格,我们可以这么写:
  • SELECTtrim(hero_name),
      trim(fever)
    FROM
      timi_adc
    WHERE
      id = 20;
    
  • TRIM 并不会修改原数据修改原数据需要配合UPDATE/DELETE语句使用
  •   TRIM函数也可以精准的去掉前面或者后面的空格,或者其他的字符,语法如下:
  • TRIM( BOTH|LEADING|TRAILING removed_str FROM str);
    
  • ·
  •   TRIM函数可以加上LEADING来只除去前面的空格,或者加上TRAILING来只除去后面的空格,如果都不加,则默认是BOTH。TRIM函数可以删除指定的字符串内容,如果不加,则默认删除空格。
  •   比如我们要去掉id为21这条数据中fever)尾部的Q,那么我们可以这么写查询语句:
  • SELECTTRIM(
        TRAILING 'Q'FROM
          fever
      )
    FROM
      timi_adc
    WHERE
      id = 21;
    
    1.   REPLACE

  •   TRIM函数不能去掉字符串中间的值,如果要修改中间的值,我们可以使用REPLACE函数,它的语法如下:
  • UPDATE table_name 
    SET colunm_name = 
    REPLACE(column_name,string_find,string_to_replace) 
    WHERE conditions;
    
  1. Mysql关联查询

  1. 左连接

语法

SELECT*
FROM
  TableA LEFT  JOIN
  TableB
  ON condition;
  • JOIN是关联查询的关键词,基础的结构是TableA JOIN TableB,即表A和表B关联查询,LEFT表示是左连接
  • ON是关联查询的条件

左连接就是返回左表的所有数据,即使右表没有匹配的数据(此时右表会以NULL的形式匹配数据)。

  1. 右连接

语法

SELECT*
FROM
  TableA RIGHT JOIN 
  TableB 
  ON condition;

多表关联查询

在实际应用中,我们有时候会对三张表以上进行关联查询,在这种情况下,我们往往会选中一张表作为主表,以它为基准,进行LEFTJOIN或RIGHT JOIN查询。

只会使用A LEFT JOIN B、A LEFT JOIN C。不要出现A RIGHT JOIN B、B RIGHT JOIN C这种情况

语法

SELECT*
FROM
  TableA 
  LEFT JOIN TableB ON conditionA
  LEFT JOIN TableC ON conditionB;