आप इसे कॉलम, या कॉलम के योग से कर सकते हैं। नीचे मेरी मेज पर एक परीक्षण है।
उपयोगकर्ताओं से सीआरसी के रूप में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 |
+------------+
संपादित करें
एक संग्रहीत प्रक्रिया में एक डेटाबेस नाम और एक टेबल नाम पारित किया जा रहा है, नीचे सीआरसी वापस कर देगा। यह विशेष 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 |
+------------+