MySQL నకిలీ వరుసలను ఎలా తొలగిస్తుంది

How Mysql Delete Duplicate Rows



MySQL అనేది రిలేషనల్ డేటాసెట్, ఇది డేటాను అడ్డు వరుసలు మరియు నిలువు వరుసలను కలిగి ఉన్న పట్టికలలో నిల్వ చేస్తుంది. అయితే, డేటాబేస్‌లో నిల్వ చేయబడిన డేటా అప్లికేషన్‌లు లేదా వినియోగదారులలో లోపాల వల్ల కలిగే నకిలీ విలువలను కలిగి ఉండవచ్చు.

ఈ ట్యుటోరియల్‌లో, డేటాబేస్ పరిమాణాన్ని తగ్గించడానికి మరియు సర్వర్ పనితీరును పెంచడంలో సహాయపడటానికి MySQL డేటాబేస్‌లోని నకిలీ వరుసలను ఎలా తొలగించాలో నేర్చుకుంటాము.







మేము కొనసాగించడానికి ముందు, మేము ఊహిస్తున్నాము:



  1. మీరు MySQL ఇన్‌స్టాల్ చేసి, మీ సిస్టమ్‌లో రన్ అవుతున్నారు
  2. మీకు డేటాబేస్‌కు రూట్ యాక్సెస్ ఉంది.
  3. ప్రయోగాలు చేయడానికి లేదా పరీక్షించడానికి మీకు డేటాబేస్ యాక్సెస్ ఉంది

గమనిక : ఈ గైడ్‌లో అందించిన కాన్సెప్ట్‌లను ప్రయత్నించడానికి మీకు నమూనా డేటాబేస్ అవసరమైతే, దయచేసి సకీలా డేటాబేస్‌ని పరిగణించండి లేదా ఈ గైడ్‌లో ఉపయోగించిన డేటాబేస్ కాపీని డౌన్‌లోడ్ చేయండి.



వనరులు క్రింద ఇవ్వబడ్డాయి:





ప్రాథమిక వినియోగం

మేము ప్రారంభించడానికి ముందు, మేము ఉద్దేశపూర్వకంగా పరీక్ష ప్రయోజనాల కోసం నకిలీ విలువలను కలిగి ఉన్న పట్టికను సృష్టిస్తాము. ఈ చర్యను నిర్వహించడానికి SQL ప్రశ్నలు క్రింద ఉన్నాయి:

వా డు ప్రపంచం;
డ్రాప్ పట్టిక IF EXISTS వినియోగదారులు;
సృష్టించు పట్టిక వినియోగదారులు(id INT ప్రాథమిక కీ కాదు శూన్య AUTO_INCREMENT ,వినియోగదారు పేరు వార్చర్ (10) కాదు శూన్య ,పూర్తి పేరు వార్చర్ (ఇరవై),ఇమెయిల్ వార్చర్ (255) కాదు శూన్య );
ఇన్సర్ట్ INTO వినియోగదారులు(వినియోగదారు పేరు,పూర్తి పేరు,ఇమెయిల్) విలువలు
('కన్య', 'క్లాడ్ ఎం. మోరి', '[ఇమెయిల్ రక్షించబడింది]'),
('నొక్కండి', 'టిఫనీ జి. బైలీ', '[ఇమెయిల్ రక్షించబడింది]'),
('రాకెట్', 'క్రిస్టోఫర్ ఎస్. పేటన్', '[ఇమెయిల్ రక్షించబడింది]'),
('చీకటి పదార్థం', 'ప్యాట్రిసియా జె. ఫాక్స్', '[ఇమెయిల్ రక్షించబడింది]'),
('విషయం', 'ఫాయే హెచ్. హార్ట్‌లీ', '[ఇమెయిల్ రక్షించబడింది]'),
('చీకటి పదార్థం', 'ప్యాట్రిసియా జె. ఫాక్స్', '[ఇమెయిల్ రక్షించబడింది]'),
('రాకెట్', 'క్రిస్టోఫర్ ఎస్. పేటన్', '[ఇమెయిల్ రక్షించబడింది]'),
('ఆర్టెమిస్', 'వెస్లీ సి. డిల్లార్డ్', '[ఇమెయిల్ రక్షించబడింది]');

మీ అవసరాలకు తగినట్లుగా పై ప్రశ్నను సవరించడానికి సంకోచించకండి. లోపాలను నివారించడానికి మీ వద్ద డేటాబేస్ (ప్రపంచం) సృష్టించబడిందని కూడా మీరు నిర్ధారించుకోవాలి.



ఇప్పుడు, మేము పట్టిక లోపల మొత్తం డేటాను పొందినట్లయితే మరియు వినియోగదారు పేరు ద్వారా క్రమంలో, చూపిన విధంగా మన వద్ద ఉన్న నకిలీలను చూస్తాము:

mysql> వా డు ప్రపంచం;
డేటాబేస్ మార్చబడింది
mysql> ఎంచుకోండి * నుండి వినియోగదారులు ద్వారా ఆర్డర్ వినియోగదారు పేరు;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|వినియోగదారు పేరు|పూర్తి పేరు|ఇమెయిల్|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ఆర్టెమిస్|వెస్లీ సి. డిల్లార్డ్|[ఇమెయిల్ రక్షించబడింది]|
| 4 |చీకటి పదార్థం|ప్యాట్రిసియా J. ఫాక్స్|[ఇమెయిల్ రక్షించబడింది]|
| 6 |చీకటి పదార్థం|ప్యాట్రిసియా J. ఫాక్స్|[ఇమెయిల్ రక్షించబడింది]|
| 2 |నొక్కండి|టిఫనీ జి. బైలీ|[ఇమెయిల్ రక్షించబడింది]|
| 5 |విషయం|ఫే హెచ్. హార్ట్లీ|[ఇమెయిల్ రక్షించబడింది]|
| 3 |రాకెట్|క్రిస్టోఫర్ S. పేటన్|[ఇమెయిల్ రక్షించబడింది]|
| 7 |రాకెట్|క్రిస్టోఫర్ S. పేటన్|[ఇమెయిల్ రక్షించబడింది]|
| 1 |కన్య|క్లాడ్ M. మోరి|[ఇమెయిల్ రక్షించబడింది]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

పై పట్టిక నుండి మీరు చూడగలిగినట్లుగా, మాకు రెండు నకిలీ విలువలు ఉన్నాయి, అవి డేటాబేస్‌ను ఎటువంటి కారణం లేకుండా పెద్దవిగా చేస్తాయి మరియు నెమ్మదిగా వేగాన్ని కలిగిస్తాయి.

ఈ విలువలను ఎలా తొలగించవచ్చో ఇప్పుడు తెలుసుకుందాం.

#1 - జాయిన్‌ను తొలగించండి

డేటాబేస్‌లోని నకిలీ వరుసలను తొలగించడానికి ఒక మార్గం MySQL డిలీట్ జాయిన్ స్టేట్‌మెంట్‌ని ఉపయోగించడం. అయితే, ప్రశ్న, నకిలీ విలువలను తొలగించడానికి ఐడీలను ఉపయోగిస్తుంది.

ఉదాహరణకు, పై వినియోగదారుల పట్టికలోని నకిలీ విలువలను తొలగించడానికి, మేము ఇన్‌పుట్ చేయవచ్చు:

తొలగించు టేబుల్ 1 నుండి వినియోగదారుల పట్టిక 1 లోపలి చేరండి వినియోగదారుల పట్టిక 2 ఎక్కడ టేబుల్ 1.ఐడి<టేబుల్ 2.ఐడి మరియు table1.email=table2.email;

మీరు పై ప్రశ్నను అమలు చేసిన తర్వాత, దిగువ అవుట్‌పుట్‌లో చూపిన విధంగా మీరు నకిలీ విలువలను తీసివేస్తారు:

mysql> తొలగించు టేబుల్ 1 నుండి వినియోగదారుల పట్టిక 1 లోపలి చేరండి వినియోగదారుల పట్టిక 2 ఎక్కడ టేబుల్ 1.ఐడి<టేబుల్ 2.ఐడి మరియు table1.email=table2.email;
ప్రశ్న సరే, 2వరుసలు ప్రభావితమయ్యాయి(0.01సెకను)

mysql> ఎంచుకోండి * నుండి వినియోగదారులు ద్వారా ఆర్డర్ వినియోగదారు పేరు;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|వినియోగదారు పేరు|పూర్తి పేరు|ఇమెయిల్|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ఆర్టెమిస్|వెస్లీ సి. డిల్లార్డ్|[ఇమెయిల్ రక్షించబడింది]|
| 6 |చీకటి పదార్థం|ప్యాట్రిసియా J. ఫాక్స్|[ఇమెయిల్ రక్షించబడింది]|
| 2 |నొక్కండి|టిఫనీ జి. బైలీ|[ఇమెయిల్ రక్షించబడింది]|
| 5 |విషయం|ఫే హెచ్. హార్ట్లీ|[ఇమెయిల్ రక్షించబడింది]|
| 7 |రాకెట్|క్రిస్టోఫర్ S. పేటన్|[ఇమెయిల్ రక్షించబడింది]|
| 1 |కన్య|క్లాడ్ M. మోరి|[ఇమెయిల్ రక్షించబడింది]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

#2 - వరుస_సంఖ్య () ఫంక్షన్

మేము అమలు చేయగల రెండవ పద్ధతి MySQL row_number () ఫంక్షన్‌ను ఉపయోగించడం. ఈ ఫంక్షన్‌కు MySQL వెర్షన్ 8 మరియు అంతకంటే ఎక్కువ మద్దతు ఉంది.

ఇది ప్రతి అడ్డు వరుసకు ఒక వరుస పూర్ణాంక విలువను కేటాయించడం ద్వారా పనిచేస్తుంది, డూప్లికేట్ విలువలు కలిగిన అడ్డు వరుసలు 1 కంటే ఎక్కువ విలువను పొందుతాయి.

ఈ ఫంక్షన్ గురించి మరింత తెలుసుకోవడానికి, దిగువ అందించిన వనరును ఉపయోగించండి:

https://dev.mysql.com/doc/refman/8.0/en/window-function-description.html#function_row-number

నకిలీ విలువలతో అడ్డు వరుసల ఐడిని అందించే దిగువ ప్రశ్నను పరిగణించండి:

ఎంచుకోండి id నుండి ( ఎంచుకోండి id,ROW_NUMBER()ఓవర్( పార్టిషన్ వినియోగదారు పేరు ద్వారా ద్వారా ఆర్డర్ వినియోగదారు పేరు) AS వరుస_వర్ నుండి వినియోగదారులు)t1 ఎక్కడ వరుస_వర్> 1;

మీరు పై ప్రశ్నను అమలు చేసిన తర్వాత, దిగువ అవుట్‌పుట్‌లో చూపిన విధంగా మీరు ఐడిల జాబితాను పొందాలి:

+ ---- +
|id|
+ ---- +
| 6 |
| 7 |
+ ---- +
2వరుసలు లో సెట్ (0.01సెకను)

మీరు విలువలను తీసివేయాలనుకుంటే, దిగువ చూపిన విధంగా SELECT స్టేట్‌మెంట్‌ను DELETE స్టేట్‌మెంట్‌తో భర్తీ చేయండి:

తొలగించు నుండి వినియోగదారులు ఎక్కడ id IN ( ఎంచుకోండి id నుండి ( ఎంచుకోండి id,ROW_NUMBER()ఓవర్( పార్టిషన్ వినియోగదారు పేరు ద్వారా ద్వారా ఆర్డర్ వినియోగదారు పేరు) AS వరుస_వర్ నుండి వినియోగదారులు)t1 ఎక్కడ వరుస_వర్> 1);

చివరగా, SELECT స్టేట్‌మెంట్ ఉపయోగించి నకిలీ విలువలు తీసివేయబడ్డాయని మీరు ధృవీకరించవచ్చు.

mysql> ఎంచుకోండి * నుండి వినియోగదారులు ద్వారా ఆర్డర్ వినియోగదారు పేరు;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|id|వినియోగదారు పేరు|పూర్తి పేరు|ఇమెయిల్|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |ఆర్టెమిస్|వెస్లీ సి. డిల్లార్డ్|[ఇమెయిల్ రక్షించబడింది]|
| 4 |చీకటి పదార్థం|ప్యాట్రిసియా J. ఫాక్స్|[ఇమెయిల్ రక్షించబడింది]|
| 2 |నొక్కండి|టిఫనీ జి. బైలీ|[ఇమెయిల్ రక్షించబడింది]|
| 5 |విషయం|ఫే హెచ్. హార్ట్లీ|[ఇమెయిల్ రక్షించబడింది]|
| 3 |రాకెట్|క్రిస్టోఫర్ S. పేటన్|[ఇమెయిల్ రక్షించబడింది]|
| 1 |కన్య|క్లాడ్ M. మోరి|[ఇమెయిల్ రక్షించబడింది]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

ముగింపు

ఈ ట్యుటోరియల్‌లో, మేము డేటాబేస్ నుండి నకిలీ విలువలను తొలగించే రెండు పద్ధతుల గురించి చర్చించాము. పెద్ద డేటాబేస్‌లు, ముఖ్యంగా సాధారణ ఉపయోగంలో ఉన్నవి, బాహ్య దిగుమతులు మరియు ఇతర లోపాల నుండి అనేక నకిలీ విలువలను కలిగి ఉండవచ్చు. అందువల్ల, అప్లికేషన్‌లు ఉత్తమంగా పనిచేస్తాయో లేదో నిర్ధారించడానికి నకిలీ విలువలను ప్రక్షాళన చేయాల్సిన అవసరం ఉంది.