ווי טוט 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 ווען איר אַרייַנלייגן דאַטן, נאָך די אייגנארטיקייט פון די רעקאָרד איז באַשטימט, אויב דופּליקאַט דאַטן זענען ינסערטאַד, קיין טעות וועט זיין אומגעקערט, אָבער בלויז אַ ווארענונג וועט זיין אומגעקערט.און ריפּלייסט אין אויב עס איז אַ ערשטיק אָדער יינציק רעקאָרד, עס וועט זיין אויסגעמעקט ערשטער.אַרייַנלייגן אַ נייַ רעקאָרד.

אן אנדער וועג צו שטעלן די אייגנארטיקייט פון דיין דאַטן איז צו לייגן אַ יינציק אינדעקס ווי דאָס:

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;

די אויבן אָנפֿרעג ויסזאָגונג וועט צוריקקומען די נומער פון דופּליקאַט רעקאָרדס אין די 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);

Hope Chen Weiliang בלאָג ( https://www.chenweiliang.com/ ) שערד "ווי קען MySQL אָנפרעג און שעפּן דופּליקאַט דאַטן?פֿילטרירונג און דעדופּליקאַטיאָן סטייטמאַנץ" וועט העלפֿן איר.

ברוכים הבאים צו טיילן דעם לינק פון דעם אַרטיקל:https://www.chenweiliang.com/cwl-499.html

ברוכים הבאים צו די טעלעגראַם קאַנאַל פון Chen Weiliang ס בלאָג צו באַקומען די לעצטע דערהייַנטיקונגען!

🔔 זייט דער ערשטער צו באַקומען די ווערטפול "ChatGPT אינהאַלט מאַרקעטינג אַי געצייַג באַניץ גייד" אין די קאַנאַל שפּיץ וועגווייַזער! 🌟
📚 דער פירער כּולל ריזיק ווערט, 🌟 דאָס איז אַ זעלטן געלעגנהייט, טאָן ניט פעלן עס! ⏰⌛💨
ייַנטיילן און ווי אויב איר ווילט!
דיין ייַנטיילונג און לייקס זענען אונדזער קעסיידערדיק מאָוטאַוויישאַן!

 

发表 评论

אייער בליצפּאָסט אַדרעס וועט נישט זיין ארויס. פארלאנגט פעלדער זענען געניצט * פירמע

מעגילע צו שפּיץ