با استفاده از تابع CRC32 در MySQL یک ستون جدید به نام checksum اضافه کنید که مقدار CRC32 از ترکیب فیلدهای name و email را محاسبه کند و سپس سطرهای دارای مقدار checksum تکراری را پیدا کنید.

4.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:49

0.0

ابتدا با ALTER TABLE یک ستون عددی (مثلاً INT UNSIGNED) اضافه کنید و سپس با UPDATE مقدار آن را با CRC32(CONCAT_WS('', name, email)) پر کنید؛ یا به‌صورت جایگزین از ستون تولیدشده (GENERATED) با عبارت CRC32(CONCAT_WS('', name, email)) استفاده کنید تا همیشه مقدار همگام بماند. برای یافتن رکوردهای تکراری از SELECT checksum, COUNT(*) ... GROUP BY checksum HAVING COUNT(*)>1 استفاده کنید. نکات: از CONCAT_WS برای جلوگیری از NULL، فیلدها را در صورت نیاز به CHAR تبدیل کنید و بدانید CRC32 عدد unsigned برمی‌گرداند که برای بررسی یکپارچگی و یافتن سریع تکراری‌ها مفید است.

توسط پژوهشگر در 201 روز قبل ساعت 03:49
دسته بندی ها: MySQL MySQL for beginner
nima در 201 روز قبل ساعت 05:07

برای افزودن ستون checksum از CRC32 بر ترکیب name و email می‌توانید یا یک ستون GENERATED استفاده کنید یا یک ستون UNSIGNED INT اضافه و با UPDATE مقداردهی کنید. استفاده از CONCAT_WS('', name, email) کمک می‌کند تا NULL نماند و CRC32 خروجی unsigned 32-bit می‌دهد که به یافتن سریع تکراری‌ها مفید است. برای پیدا کردن رکوردهای تکراری از GROUP BY checksum HAVING COUNT(*) > 1 استفاده کنید، اما به دلیل احتمال برخورد CRC32 با هم، بهتر است نتیجه را با بررسی دقیق نام و ایمیل تأیید کنید. همچنین ایندکس روی ستون checksum می‌تواند کارا باشد و GENERATED COLUMN هم به‌روزرسانی خودکار مقدار را تضمین می‌کند.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری