sql >> Databáze >  >> RDS >> Mysql

Vyberte a vraťte pouze kontrolní součet (nikoli tabulku) z tabulky kontrolních součtů v mysql

Můžete to udělat po sloupcích nebo součtem sloupců. Níže je test na mém stole.

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 |
+------------+

Upravit

V uložené proceduře, které je předáván název databáze a název tabulky, níže uvedené vrátí crc. Jde o speciální INFORMATION_SCHEMA db k načtení názvů sloupců za vás a všechny tyto sloupce a hodnoty použije k vygenerování kontrolního součtu.

Uložená procedura:

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 ;

Otestujte to:

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

Stránka s příručkou pro crc32



  1. Agregační pole Postgresql

  2. c3p0 maxIdleTime je stejný jako wait_timeout mysql?

  3. Jak postupovat při ochraně souborů před neoprávněným stahováním

  4. Tabulka 'performance_schema.session_variables' neexistuje