Anyè Atik
MisklKi jan demann yo okipe done kopi?Filtre pou retire kopi done deklarasyon
Miskl Manyen done kopi
Gen dwa gen dosye kopi nan kèk tab done MySQL.Nan kèk ka, nou pèmèt egzistans la nan done kopi, men pafwa nou bezwen tou efase done sa yo kopi.
Nan chapit sa a, nou pral prezante kijan pou anpeche done kopi nan tablo done a ak kijan pou efase done kopi nan tablo done a.
Anpeche done kopi nan tablo yo
Ou ka mete jaden an espesifye nan tab la done MySQL kòm KLE PRIMÈ oswa INIK (inik) Endèks asire singularité done yo.
Ann eseye yon egzanp: Pa gen okenn endis ak kle prensipal nan tablo ki anba a, kidonk tablo a pèmèt plizyè dosye kopi.
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );
Si ou vle mete jaden yo first_name ak last_name nan tablo a, done yo pa ka repete, ou ka mete mòd nan doub kle prensipal pou mete inik nan done yo. Si ou mete doub kle prensipal la, valè default kle sa a. pa ka NULL, men yo ka mete sou PA NULL.Jan sa a:
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) );
Si nou mete yon endèks inik, Lè sa a, lè mete done kopi, deklarasyon an SQL ap echwe pou egzekite avèk siksè epi voye yon erè.
Diferans ki genyen ant INSERT IGNORE INTO ak INSERT INTO se ke INSERT IGNORE inyore done ki deja egziste nan baz done a. Si pa gen okenn done nan baz done a, li pral mete nouvo done, epi si gen done, li pral sote done sa yo.Nan fason sa a, done yo ki deja egziste nan baz done a ka konsève, epi objektif pou mete done nan espas sa a ka reyalize.
Egzanp sa a sèvi ak INSERT IGNORE INTO, ki egzekite san erè epi san yo pa mete done kopi nan tablo done a:
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 Lè w ap mete done yo, apre yo fin mete singularite dosye a, si yo mete kopi done yo, yo pap retounen okenn erè, men yo pral voye yon avètisman sèlman.Epi REPLACE INTO nan si gen yon dosye prensipal oswa inik, efase li an premye.Mete yon nouvo dosye.
Yon lòt fason yo mete inik nan done ou a se ajoute yon endèks inik tankou sa a:
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10) UNIQUE (last_name, first_name) );
Estatistik kopi done
Anba a nou pral konte kantite kopi dosye first_name ak last_name nan tablo a:
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
Deklarasyon demann ki anwo a ap retounen kantite dosye kopi ki nan tablo person_tbl la.An jeneral, pou mande valè kopi, fè bagay sa yo:
- Detèmine ki kolòn ki gen valè kopi posib.
- Sèvi ak COUNT(*) nan lis seleksyon kolòn pou lis kolòn sa yo.
- Kolòn ki nan lis nan kloz GROUP BY.
- Claz HAVING la fikse kantite repetisyon ki pi gran pase 1.
filtre done kopi
Si ou bezwen li done inik, ou ka itilize mo kle DISTINCT nan deklarasyon SELECT a pou filtre done kopi.
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl;
Ou ka sèvi ak GROUP BY tou pou li done inik nan yon tablo:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
done deduplike
Si ou vle efase done kopi nan tablo done a, ou ka itilize deklarasyon SQL sa a:
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;
Natirèlman, ou ka ajoute tou ENDEX (endèks) ak KLE PRIMAY (kle prensipal) nan tablo done a pou efase dosye kopi nan tablo a.Metòd jan pi ba a:
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) pataje "Ki jan MySQL fè rechèch ak okipe done kopi?Deklarasyon Filtrage ak Deduplication" ap ede ou.
Byenvini pataje lyen atik sa a:https://www.chenweiliang.com/cwl-499.html
Pou debloke plis ke trik kache🔑, byenveni sou chanèl Telegram nou an!
Pataje epi like si ou renmen li! Pataj ou yo ak renmen ou yo se motivasyon kontinye nou!