پرس و جو MySQL چگونه داده های تکراری را مدیریت می کند؟فیلتر برای حذف بیانیه داده های تکراری

خروجیپرس و جوها چگونه داده های تکراری را مدیریت می کنند؟فیلتر برای حذف بیانیه داده های تکراری

خروجی مدیریت داده های تکراری

ممکن است در برخی از جداول داده MySQL رکوردهای تکراری وجود داشته باشد، در برخی موارد، ما اجازه وجود داده های تکراری را می دهیم، اما گاهی اوقات لازم است این داده های تکراری را نیز حذف کنیم.

در این فصل نحوه جلوگیری از داده های تکراری در جدول داده ها و نحوه حذف داده های تکراری در جدول داده ها را معرفی می کنیم.


جلوگیری از داده های تکراری در جداول

می توانید فیلد مشخص شده در جدول داده MySQL را به عنوان تنظیم کنید کلید اولیه یا منحصر به فرد (بی نظیر) شاخص برای اطمینان از منحصر به فرد بودن داده ها.

بیایید یک مثال را امتحان کنیم: هیچ شاخص و کلید اصلی در جدول زیر وجود ندارد، بنابراین جدول اجازه چندین رکورد تکراری را می دهد.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

اگر می‌خواهید فیلدهای first_name و last_name را در جدول تنظیم کنید، داده‌ها قابل تکرار نیستند، می‌توانید حالت کلید اصلی دوگانه را برای تنظیم منحصربه‌فرد بودن داده‌ها تنظیم کنید. اگر کلید اصلی دوگانه را تنظیم کنید، مقدار پیش‌فرض آن کلید نمی تواند NULL باشد، اما می توان آن را روی NOT NULL تنظیم کرد.به شرح زیر است:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

اگر یک شاخص منحصر به فرد تنظیم کنیم، هنگام درج داده های تکراری، دستور SQL با موفقیت اجرا نمی شود و خطا ایجاد می کند.

تفاوت INSERT IGNORE INTO و INSERT INTO در این است که INSERT IGNORE داده هایی را که قبلاً در پایگاه داده وجود دارد نادیده می گیرد و اگر داده ای در پایگاه داده نباشد داده های جدیدی را وارد می کند و اگر داده وجود داشته باشد از این داده ها صرف نظر می کند.به این ترتیب می توان داده های موجود در پایگاه داده را حفظ کرد و به هدف از درج داده ها در شکاف دست یافت.

مثال زیر از INSERT IGNORE INTO استفاده می کند که بدون خطا اجرا می شود و داده های تکراری را در جدول داده ها وارد نمی کند:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERT IGNORE INTO هنگام درج داده ها، پس از تنظیم منحصر به فرد بودن رکورد، در صورت درج داده های تکراری، هیچ خطایی برگردانده نمی شود، بلکه فقط یک هشدار برگردانده می شود.و REPLACE INTO در صورت وجود یک رکورد اصلی یا منحصر به فرد، ابتدا آن را حذف کنید.یک رکورد جدید درج کنید.

راه دیگر برای تنظیم منحصر به فرد بودن داده ها، اضافه کردن یک شاخص UNIQUE مانند این است:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

آمار داده های تکراری است

در زیر تعداد رکوردهای تکراری first_name و last_name را در جدول می شماریم:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

عبارت query بالا تعداد رکوردهای تکراری در جدول person_tbl را برمی گرداند.به طور کلی، برای جستجوی مقادیر تکراری، موارد زیر را انجام دهید:

  • تعیین کنید کدام ستون حاوی مقادیر تکراری احتمالی است.
  • از COUNT(*) در لیست انتخاب ستون استفاده کنید تا آن ستون ها را فهرست کنید.
  • ستون های فهرست شده در بند GROUP BY.
  • بند HAVING تعداد تکرارها را بیشتر از 1 تنظیم می کند.

فیلتر کردن داده های تکراری

اگر نیاز به خواندن داده های منحصر به فرد دارید، می توانید از کلمه کلیدی DISTINCT در عبارت SELECT برای فیلتر کردن داده های تکراری استفاده کنید.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

همچنین می توانید از GROUP BY برای خواندن داده های منحصر به فرد از جدول استفاده کنید:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

داده های تکراری

اگر می خواهید داده های تکراری را در جدول داده ها حذف کنید، می توانید از دستور SQL زیر استفاده کنید:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

البته می توانید INDEX (شاخص) و PRIMAY KEY (کلید اصلی) را نیز به جدول داده اضافه کنید تا رکوردهای تکراری در جدول حذف شود.روش های زیر:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ ) shared "MySQL چگونه داده های تکراری را جستجو و مدیریت می کند؟Filtering and Deduplication Statements» به شما کمک خواهد کرد.

به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-499.html

به کانال تلگرام وبلاگ چن ویلیانگ خوش آمدید تا از آخرین به روز رسانی ها مطلع شوید!

🔔 اولین نفری باشید که "راهنمای استفاده از ابزار هوش مصنوعی بازاریابی محتوایی ChatGPT" را در فهرست بالای کانال دریافت می کنید! 🌟
📚 این راهنما حاوی ارزش بسیار زیادی است، 🌟این یک فرصت نادر است، آن را از دست ندهید! ⏰⌛💨
اگر دوست داشتید به اشتراک بگذارید و لایک کنید
اشتراک گذاری و لایک های شما انگیزه مستمر ما هستند!

 

发表 评论

آدرس ایمیل شما منتشر نخواهد شد. از زمینه های مورد نیاز استفاده می شود * 标注

به بالا بروید