sql >> データベース >  >> RDS >> Mysql

mysqlのチェックサムテーブルからチェックサム(テーブルではない)のみを選択して返します

    列ごと、または列の合計ごとに実行できます。以下は私のテーブルでのテストです。

    SELECT sum(crc32(email)) as crc from users;
    +-------------+
    | crc         |
    +-------------+
    | 10679459550 |
    +-------------+
    
    
    select sum(crc32(concat(user_id,first_name,last_name,email,reportingManager))) as crc from users;
    +------------+
    | crc        |
    +------------+
    | 7196315383 |
    +------------+
    

    編集

    データベース名とテーブル名が渡されるストアドプロシージャでは、以下はcrcを返します。特別なINFORMATION_SCHEMAに移動します dbを使用して列名を取得し、それらすべての列と値を使用してチェックサムを生成します。

    ストアドプロシージャ:

    drop procedure if exists getTableCRC32;
    DELIMITER $$
    create procedure getTableCRC32
    (   dbname varchar(80),
        tableName varchar(80)
    )
    BEGIN
        set @sql1="select GROUP_CONCAT(`column_name` SEPARATOR ',') into @colNames";
        set @sql1=concat(@sql1," FROM `INFORMATION_SCHEMA`.`COLUMNS`");
        set @sql1=concat(@sql1," WHERE `TABLE_SCHEMA`='",dbName,"'");
        set @sql1=concat(@sql1," AND `TABLE_NAME`='",tableName,"'");
        -- select @sql1;
        PREPARE stmt1 FROM @sql1;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
        -- select @colNames;
        set @sql2=concat( 'select sum(crc32(concat(',  @colNames, '))) as crc from ',tableName);
        -- select @sql2;
        PREPARE stmt2 FROM @sql2;
        EXECUTE stmt2;
        DEALLOCATE PREPARE stmt2;
    END
    $$
    DELIMITER ;
    

    テストする:

    call getTableCRC32('so_gibberish','users');
    +------------+
    | crc        |
    +------------+
    | 7196315383 |
    +------------+
    call getTableCRC32('so_gibberish','fish');
    +------------+
    | crc        |
    +------------+
    | 3273020843 |
    +------------+
    

    crc32のマニュアルページ



    1. SQLServerのデフォルトの文字エンコード

    2. このMySQLストアド関数がクエリで計算を行うのとは異なる結果をもたらすのはなぜですか?

    3. LinuxにSQLServerAlwaysOn可用性グループを展開する

    4. SUMによるMySQLグループ