Ինչպե՞ս է MySQL հարցումը մշակում կրկնօրինակ տվյալները:Զտել՝ կրկնօրինակ տվյալների հայտարարությունը հեռացնելու համար

MySQLԻնչպե՞ս են հարցումները մշակում կրկնօրինակ տվյալները:Զտել՝ կրկնօրինակ տվյալների հայտարարությունը հեռացնելու համար

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-ում, եթե կա առաջնային կամ եզակի գրառում, նախ ջնջեք այն:Տեղադրեք նոր գրառում:

Ձեր տվյալների եզակիությունը սահմանելու մեկ այլ միջոց է ավելացնել ՈՒՆԻԿ ինդեքսը, որն այսպիսին է.

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_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);

Հույս Chen Weiliang բլոգ ( https://www.chenweiliang.com/ ) կիսվել է «Ինչպե՞ս է MySQL-ը հարցումներ անում և մշակում կրկնօրինակ տվյալները:Filtering and Deduplication Statements»-ը կօգնի ձեզ:

Բարի գալուստ՝ կիսելու այս հոդվածի հղումը.https://www.chenweiliang.com/cwl-499.html

Բարի գալուստ Chen Weiliang-ի բլոգի Telegram ալիք՝ վերջին թարմացումները ստանալու համար:

🔔 Եղեք առաջինը, ով կստանա արժեքավոր «ChatGPT բովանդակության շուկայավարման AI գործիքի օգտագործման ուղեցույցը» ալիքի վերին գրացուցակում: 🌟
📚 Այս ուղեցույցը պարունակում է հսկայական արժեք, 🌟Սա հազվագյուտ հնարավորություն է, բաց մի՛ թողեք այն։ ⏰⌛💨
Տարածեք և հավանեք, եթե հավանեցիք:
Ձեր տարածումը և հավանումները մեր շարունակական շարժառիթն են:

 

发表 评论

Ձեր էլ. Փոստի հասցեն չի հրապարակվի: Օգտագործվում են պահանջվող դաշտերը * Պիտակ

ոլորել դեպի վերև