分类 Mysql 下的文章

MySQL创建数据库并指定字符集:
CREATE DATABASE  new_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MySQL修改字段:
ALTER TABLE employees CHANGE employee_age age INT;
MySQL修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_SECURE_PASSWORD';
FLUSH PRIVILEGES;

要查看MySQL数据库占用的空间大小,可以按照以下步骤操作:

  1. 连接到MySQL服务器
    使用命令行工具(如MySQL Shell、命令提示符或终端)或者MySQL客户端软件(如phpMyAdmin、Navicat等),通过适当的认证信息(如用户名、密码、主机名等)连接到目标MySQL服务器。
  2. 选择要查看的数据库
    在已经连接到MySQL服务器的环境中,执行以下SQL命令,选择您感兴趣的数据库:

    USE 数据库名称;

    数据库名称 替换为您想要查询其空间占用的实际数据库名称。

  3. 查询数据库占用空间
    使用以下SQL语句从INFORMATION_SCHEMA系统数据库中获取所需信息:

    SELECT 
        TABLE_NAME, 
        TABLE_ROWS, 
        ROUND(DATA_LENGTH / 1024 / 1024, 2) AS Data_MB, 
        ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS Index_MB, 
        ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS Total_MB
    FROM 
        INFORMATION_SCHEMA.TABLES 
    WHERE 
        TABLE_SCHEMA = '数据库名称';

    这个查询将返回每个表的名称、行数以及它们分别占用的数据空间(Data_MB)、索引空间(Index_MB)和总空间(Total_MB),单位均为兆字节(MB)。如果您想查看所有表占用空间的总计,可以进一步使用SUM函数汇总:

    SELECT 
        SUM(DATA_LENGTH) AS Total_Data_Length,
        SUM(INDEX_LENGTH) AS Total_Index_Length,
        SUM(DATA_LENGTH + INDEX_LENGTH) AS Total_Size
    FROM 
        INFORMATION_SCHEMA.TABLES 
    WHERE 
        TABLE_SCHEMA = '数据库名称';

    结果将显示数据库中所有表的总数据长度、总索引长度以及总的磁盘空间占用量。

请注意,这些查询提供的空间大小是基于磁盘上的数据文件和索引文件,不包括可能存在的临时文件、日志文件或其他与数据库相关的元数据。如果您还需要考虑这些额外因素,可能需要结合系统文件管理工具(如dudf命令)或MySQL服务器的配置参数来获取更全面的磁盘使用情况。同时,若要查看数据库在内存中的占用情况(如InnoDB缓冲池使用量),则需要查询不同的系统变量或状态信息。

窗口函数 RANK(), DENSE_RANK(), or ROW_NUMBER(): MySQL 8.0及更高版本引入了窗口函数,它们提供了更直观和精确的方式来获取记录的名次。这里分别介绍三种常用的窗口函数:

SELECT name, score, RANK() OVER (ORDER BY score DESC) AS ranks FROM students WHERE name = '小明';

RANK():给每个分区内的行分配一个唯一的名次,遇到相同的值时,所有相同的行得到相同的名次,下一个不同的值的名次跳过与相同值相同数量的名次。例如:

DENSE_RANK():类似于RANK(),但不会跳过任何名次,即使遇到相同的值。这意味着连续的名次之间不会有间隔。

ROW_NUMBER():为每个分区内的行提供一个唯一的连续整数作为名次,即使值相同,也会赋予不同的名次。

使用这些窗口函数,您可以直接在查询结果中获取特定记录的名次,同时考虑到了可能存在的分数相同的情况。如果您使用的是MySQL 8.0及以上版本,强烈建议使用这种方式。

总结起来,要获取MySQL中特定记录在排序后的名次,可以依据数据库版本和需求选择合适的方法:

对于MySQL 8.0及以上版本,优先使用窗口函数(如RANK(), DENSE_RANK(), 或 ROW_NUMBER())。
对于旧版本MySQL(< 8.0),可以使用变量累加法或子查询结合COUNT()函数,但需注意这些方法可能存在局限性(如并发问题、无法处理分数相同情况等)。