Mysql

一、相关说明

  • 更新日期2024931538分(持续更新中)

二、Mysql相关知识

  • 数据库基础

    • 命令行登陆mysql命令

      输入 mysql 【-h主机名 -P端口号 】-u用户名 -p密码

      • 登录本地的数据库则可以不用输入主机名和端口号,直接输入 mysql -u用户名 -p密码即可

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        D:\phpEnv\www>mysql -uroot -p123456
        mysql: [Warning] Using a password on the command line interface can be insecure.
        Welcome to the MySQL monitor. Commands end with ; or \g.
        Your MySQL connection id is X
        Server version: 5.7.40 MySQL Community Server (GPL)

        Copyright (c) 2000, 2022, Oracle and/or its affiliates.

        Oracle is a registered trademark of Oracle Corporation and/or its
        affiliates. Other names may be trademarks of their respective
        owners.

        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

        mysql>

        提示:在 -p 后直接输入密码,则不可以加空格,并且在这里输入密码,密码会显示出来;建议-p后按回车,命令行窗口就会自动跳到下一行:Enter password:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        D:\phpEnv\www>mysql -uroot -p
        Enter password: ******
        Welcome to the MySQL monitor. Commands end with ; or \g.
        Your MySQL connection id is X
        Server version: 5.7.40 MySQL Community Server (GPL)

        Copyright (c) 2000, 2022, Oracle and/or its affiliates.

        Oracle is a registered trademark of Oracle Corporation and/or its
        affiliates. Other names may be trademarks of their respective
        owners.

        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

        mysql>
      • 登录的是远端服务器的数据库,则得输入主机名和端口号,主机192.1X8.5.1X6,端口3306,用户名为root,密码123456

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        D:\phpEnv\www>mysql -h192.1X8.5.1X6 -P3306 -uroot -p123456
        mysql: [Warning] Using a password on the command line interface can be insecure.
        Welcome to the MySQL monitor. Commands end with ; or \g.
        Your MySQL connection id is X
        Server version: 5.6.50-log Source distribution

        Copyright (c) 2000, 2022, Oracle and/or its affiliates.

        Oracle is a registered trademark of Oracle Corporation and/or its
        affiliates. Other names may be trademarks of their respective
        owners.

        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

        mysql>

        注意:-P端口号中的P是大写的,要跟密码前面的p(小写)区分开

    • 命令行退出mysql命令

      quit; 或者 exit; 或者 \q;

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      mysql> quit;
      Bye

      D:\phpEnv\www>

      mysql> exit;
      Bye

      D:\phpEnv\www>
      mysql> \q;
      Bye

      D:\phpEnv\www>

三、SQL语句及其种类

  • 数据定义语言DDL(Data Definition Language)——CREATE、DROP、ALTER、…

    • 创建数据库

      CREATE DATABASE 数据库名;

    • 删除数据库

      DROP DATABASE 数据库名;

    • 使用数据库

      USE 数据库名;

    • 创建表

      CREATE TABLE 表名(

      ​ 列名1 列1类型,

      ​ …

      ​ 列名n 列n类型,

      ​ PRIMARY KEY (‘列名’)

      );

    • 删除表

      DROP TABLE 表名;

    • 查看数据库、数据表、表结构

      SHOW DATABASES;

      SHOW TABLES;

      DESC 表名; 或 DESCRIBE 表名;

    • 原数据表的结构,索引

      SHOW CREATE TABLE 表名;

    • 修改表名

      RENAME TABLE 原表名 TO 新表名;

  • 数据查询语言DQL(Data Query Language)——SELECT

    • 简单查询

      SELECT * FROM 表名 WHERE 字段=’值’;

      SELECT * FROM 表名 WHERE 条件 IN(‘值’,’值’,…,’值’);

    • 联表查询

      • 左连接

        SELECT a.*,b.字段(需要的值) FROM B表名 b LEFT JOIN A表名 a ON a.字段 =b.字段 WHERE 字段=’值’;

    • 嵌套查询

      SELECT * FROM A表名 WHERE 字段1 IN(SELECT 字段1 FROM B表名 WHERE 字段3 =’值’);

    • 其他查询

      • 去掉重复值

        • DISTINCT

          SELECT DISTINCT 字段 FROM 表名;

      • 限制行数

        • LIMIT

          SELECT * FROM 表名 LIMIT 数值;

      • 范围区间

        • BETWEEN…AND

          SELECT * FROM 表名 WHERE 字段1 = ‘值’ AND 字段2 BETWEEN ‘起始范围’ AND ‘结束范围’;

      • 除…之外

        • NOT IN

          SELECT 字段(需要的值) FROM 表名 WHERE 字段(除…之外) NOT IN (‘值’);

      • 包含

        • LIKE

          SELECT * FROM 表面 WHERE 字段 LIKE ‘%值%’;

      • 排序

        • 升序

          SELECT * FROM 表名 WHERE 字段 = ‘值’ ORDER BY 排序字段 ASC;

        • 降序

          SELECT * FROM 表名 WHERE 字段 = ‘值’ ORDER BY 排序字段 DESC;

        • 先升序再升序

          SELECT * FROM 表名 WHERE 字段 = ‘值’ ORDER BY 排序字段1 ASC,排序字段2 ASC;

          SELECT * FROM 表名 WHERE 字段 = ‘值’ ORDER BY 排序字段1,排序字段2;

        • 先降序再降序

          SELECT * FROM 表名 WHERE 字段 = ‘值’ ORDER BY 排序字段1 DESC,排序字段2 DESC;

        • 分组

          • GROUP BY

            SELECT * FROM 表名 GROUP BY 字段1,…,字段N;

            SELECT * FROM 表名 GROUP BY 字段1,…,字段N ORDER BY 字段 ASC/DESC;

            SELECT * FROM 表名 GROUP BY 字段1,…,字段N HAVING 字段(<、>、=)值;

            提示:# WHERE关键字无法与合计函数一起使用,聚合函数作为筛选条件时,不能用WHERE,而是用HAVING语法 # HAVING关键字放在GROUP BY关键字后面,针对分组后的数据进行筛选

        • 组合查询

          • UNION ALL

            SELECT 字段 FROM 表名 WHERE 字段=’值’ UNION ALL SELECT 字段 FROM 表名 WHERE 字段=’值’;

        • 设置别名

          • AS

            SELECT 字段 AS 别名 FROM 表名;

        • WHERE过滤空值

          WHERE 列名 IS NOT NULL

          WHERE 列名 != ‘NULL’

          WHERE 列名 <> ‘NULL’

        • 操作符

          AND

          OR

          提示:AND优先级大于OR优先级

          • MAX最大值

            SELECT MAX(字段) FROM 表名;

          • MIN最小值

            SELECT MIN(字段) FROM 表名;

          • AVG平均值

            SELECT AVG(字段) FROM 表名;

          • SUM和

            SELECT SUM(字段) FROM 表名;

        • 函数

          条件函数

  • 数据操纵语言DML(Data Manipulation Language)——INSERT、UPDATE、DELETE

    • INSERT INTO 表名 (字段1,字段2,…,字段n) VALUES (‘值1’,’值2’,…,’值n’);

    • UPDATE 表名 SET 字段 = ‘值’(需要修改的值) WHERE 字段 = ‘值’;

    • DELETE 表名 WHERE 字段 = ‘值’ AND 字段 =’值’;

  • 数据控制语言DCL(Data Control Language)

四、其他相关知识

  • 性能

    • SELECT

    • SELECT * FROM 表

      查询出表中所有数据,性能比较差

      • SELECT 常量 FROM 表

      查询出结果是所有记录数的常量,性能比较高

    • SELECT COUNT(*)、SELECT COUNT(1)、SELECT COUNT(主键)

      • SELECT COUNT(*)和SELECT COUNT(1)两者返回结果是一样的
      • 没有主键,使用COUNT(1)比COUNT(*)快
      • 有主键,那么COUNT(主键)最快