Swali la MySQL linashughulikiaje data iliyorudiwa?Chuja ili kuondoa taarifa ya data iliyorudiwa

MySQLMaswali hushughulikiaje data iliyorudiwa?Chuja ili kuondoa taarifa ya data iliyorudiwa

MySQL Inashughulikia data iliyorudiwa

Huenda kukawa na nakala za rekodi katika baadhi ya majedwali ya data ya MySQL. Katika baadhi ya matukio, tunaruhusu kuwepo kwa nakala za data, lakini wakati mwingine tunahitaji kufuta nakala za data hizi.

Katika sura hii, tutakuletea jinsi ya kuzuia nakala za data kwenye jedwali la data na jinsi ya kufuta nakala ya data kwenye jedwali la data.


Zuia data iliyorudiwa kwenye jedwali

Unaweza kuweka uga ulioainishwa kwenye jedwali la data la MySQL kama UFUNGUO WA MSINGI au KIPEKEE (kipekee) Fahirisi ili kuhakikisha upekee wa data.

Hebu tujaribu mfano: Hakuna faharisi na funguo za msingi kwenye jedwali lililo hapa chini, kwa hivyo jedwali huruhusu rekodi nyingi rudufu.

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

Ikiwa unataka kuweka sehemu first_name na last_name kwenye jedwali, data haiwezi kurudiwa, unaweza kuweka hali ya vitufe vya msingi maradufu ili kuweka upekee wa data.Ukiweka vitufe vya msingi viwili, thamani chaguomsingi ya ufunguo huo. haiwezi kuwa NULL, lakini inaweza kuwekwa kuwa NOT NULL.Kama ifuatavyo:

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)
);

Ikiwa tutaweka fahirisi ya kipekee, basi tunapoingiza data iliyorudiwa, taarifa ya SQL itashindwa kutekeleza kwa mafanikio na kutupa hitilafu.

Tofauti kati ya INSERT IGNORE INTO na INSERT INTO ni kwamba INSERT IGNORE inapuuza data ambayo tayari ipo kwenye hifadhidata. Ikiwa hakuna data kwenye hifadhidata, itaingiza data mpya, na ikiwa kuna data, itaruka data hii.Kwa njia hii, data iliyopo kwenye hifadhidata inaweza kuhifadhiwa, na madhumuni ya kuingiza data kwenye pengo yanaweza kupatikana.

Mfano ufuatao unatumia INSERT IGNORE INTO, ambayo hutekeleza bila makosa na haiingizii nakala za data kwenye jedwali la data:

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)

WEKA UPUUZI NDANI Wakati wa kuingiza data, baada ya upekee wa rekodi kuwekwa, ikiwa data iliyorudiwa imeingizwa, hakuna hitilafu itarejeshwa, lakini onyo pekee litarejeshwa.Na INGIA ndani ikiwa kuna rekodi ya msingi au ya kipekee, ifute kwanza.Weka rekodi mpya.

Njia nyingine ya kuweka upekee wa data yako ni kuongeza faharisi ya UNIQUE kama hii:

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

Takwimu zinarudia data

Hapo chini tutahesabu idadi ya nakala za rekodi za first_name na last_name kwenye jedwali:

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

Taarifa ya hoja iliyo hapo juu itarudisha idadi ya rekodi zilizorudiwa katika jedwali la person_tbl.Kwa ujumla, kuuliza maadili yanayorudiwa, fanya yafuatayo:

  • Bainisha ni safu wima gani ina thamani zinazowezekana kurudiwa.
  • Tumia COUNT(*) katika orodha ya kuchagua safu ili kuorodhesha safu wima hizo.
  • Safu wima zilizoorodheshwa katika kifungu cha GROUP BY.
  • Kifungu cha HAVING kinaweka idadi ya marudio zaidi ya 1.

kichujio data rudufu

Iwapo unahitaji kusoma data ya kipekee, unaweza kutumia neno kuu la DISTINCT katika kauli SELECT ili kuchuja nakala ya data.

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

Unaweza pia kutumia GROUP BY kusoma data ya kipekee kutoka kwa jedwali:

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

punguza data

Ikiwa ungependa kufuta nakala ya data kwenye jedwali la data, unaweza kutumia taarifa ifuatayo ya 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;

Bila shaka, unaweza pia kuongeza INDEX (index) na PRIMAY KEY (ufunguo msingi) kwenye jedwali la data ili kufuta rekodi zilizorudiwa kwenye jedwali.Mbinu kama zifuatazo:

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

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ilishirikiwa "Je, MySQL huulizaje na kushughulikia data iliyorudiwa?Taarifa za Kuchuja na Kupunguza" zitakusaidia.

Karibu kushiriki kiungo cha makala hii:https://www.chenweiliang.com/cwl-499.html

Karibu kwenye chaneli ya Telegramu ya blogu ya Chen Weiliang ili kupata masasisho mapya zaidi!

🔔 Kuwa wa kwanza kupata "Mwongozo wa Matumizi ya Zana ya AI ya Uuzaji wa Maudhui ya ChatGPT" katika saraka ya juu ya kituo! 🌟
📚 Mwongozo huu una thamani kubwa, 🌟Hii ni fursa adimu, usiikose! ⏰⌛💨
Share na like ukipenda!
Kushiriki kwako na kupenda kwako ndio motisha yetu inayoendelea!

 

发表 评论

Anwani yako ya barua pepe haitachapishwa. 必填 项 已 用 * 标注

tembeza juu