Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране на Max и Min записи в една MySQL команда

  2. MySQL match() against() - подреждане по уместност и колона?

  3. Ефективно избиране на най-близкия (разстояние) запис от база данни

  4. Схема на база данни за ACL

  5. Най-добрият начин за денормализиране на данни в Django?