mysql da çift kayıtlar

0
Onaylı Üye
Üye
Katılım
1 Temmuz 2006
Mesajlar
1,356
Tepki puanı
0
arkadşlar. mysql da bulunan çift kayıtları nasıl silebilirim. mesela 20.000 lik bir db de 1500 tane çift kayıt var diyelim. çift kayıtları nasıl teke düşürebiliriz??
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
77
Konum
SEO
arkadşlar. mysql da bulunan çift kayıtları nasıl silebilirim. mesela 20.000 lik bir db de 1500 tane çift kayıt var diyelim. çift kayıtları nasıl teke düşürebiliriz??

Cift kayitlarin oldugu tablo adinin ciftli_tablo ve cift kayitlarin email alani uzerinde oldugunu varsayalim.

CREATE TABLE tekil_tablo select * from ciftli_tablo where 1=2;
ALTER TABLE tekil_tablo ADD PRIMARY KEY (email);
INSERT IGNORE INTO tekil_tablo SELECT * FROM ciftli_tablo;
RENAME TABLE ciftli_tablo TO ciftli_tablo_eski;
RENAME TABLE tekil_tablo TO ciftli_tablo;

Bu komutlari calistirmanizin ardindan ciftli_tablo da artik tum emailler tekil olacaktir.

Eger cift kayitlar 1 den fazla alan uzerinde ise yukaridaki komut zincirindeki 2. satirdaki komutu asagidaki sekilde degistirebilirsiniz:

ALTER TABLE tekil_tablo ADD PRIMARY KEY (email,ad,soyad,adres);
 
1
Onaylı Üye
Üye
Katılım
25 Eylül 2006
Mesajlar
5,893
Tepki puanı
88
Konum
www.odatv.com
merhabalar , benimde yorum tablomda yorumlar bazen çift ve daha çok çıkabiliryor.
ne yapabilirim , yardımcı olması bakımından tablo aşağıda ;

CREATE TABLE `iddap_comments` (
`pid` mediumint(10) NOT lisanssız default '0',
`msg_id` mediumint(10) NOT lisanssız auto_increment,
`msg_author` varchar(25) NOT lisanssız default '',
`msg_body` text NOT lisanssız,
`msg_date` datetime NOT lisanssız default '0000-00-00 00:00:00',
`msg_raw_ip` tinytext,
`msg_hdr_ip` tinytext,
`author_md5_id` varchar(32) NOT lisanssız default '',
`author_id` int(11) NOT lisanssız default '0',
PRIMARY KEY (`msg_id`),
KEY `com_pic_id` (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Used to store comments made on pics' AUTO_INCREMENT=9954 ;
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
77
Konum
SEO
merhabalar , benimde yorum tablomda yorumlar bazen çift ve daha çok çıkabiliryor.
ne yapabilirim , yardımcı olması bakımından tablo aşağıda ;

CREATE TABLE `iddap_comments` (
`pid` mediumint(10) NOT lisanssız default '0',
`msg_id` mediumint(10) NOT lisanssız auto_increment,
`msg_author` varchar(25) NOT lisanssız default '',
`msg_body` text NOT lisanssız,
`msg_date` datetime NOT lisanssız default '0000-00-00 00:00:00',
`msg_raw_ip` tinytext,
`msg_hdr_ip` tinytext,
`author_md5_id` varchar(32) NOT lisanssız default '',
`author_id` int(11) NOT lisanssız default '0',
PRIMARY KEY (`msg_id`),
KEY `com_pic_id` (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Used to store comments made on pics' AUTO_INCREMENT=9954 ;

Yukarida anlattiklarim gecerli yine.
Cift kayitlar hangi kayit ustunde ise o tablo uzerinde primary key yaratin, yada unique index.

CREATE TABLE tekil_tablo select * from iddap_comments where 1=2;
ALTER TABLE tekil_tablo ADD PRIMARY KEY (msg_body);
INSERT IGNORE INTO tekil_tablo SELECT * FROM iddap_comments;
RENAME TABLE iddap_comments TO iddap_comments_eski;
RENAME TABLE tekil_tablo TO iddap_comments;
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
77
Konum
SEO
0
Onaylı Üye
Üye
Katılım
1 Temmuz 2006
Mesajlar
1,356
Tepki puanı
0
Çok teşekkürler iyinet. Yardımların için. Sorunumuz çözüldü :)))
 
0
Onaylı Üye
Üye
Katılım
11 Mayıs 2007
Mesajlar
3,749
Tepki puanı
61
Konum
Antalya
hocam benim de sorunum şu id alanı primari key birde email alanı var. Şimdi çift mail ile kayıt girilmemesi için mail alanını primery key yapmaya çalışıyorum şu hata çıkıyor.

ALTER TABLE `ytb` DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `mail` )

MySQL çıktısı: Belgeler
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

tabloyu silip yeniden denedim bu sefer id alanıyla mail alanını ikisini birden primery key yapıyor bu yüzden gene mail adresleri yeniden girile biliyor. Access gibi çalıştığını zannediyorum. Mysql i yeni yeni öğreniyorumda. Yani benim kayıtlı olan kayıtları girmemem için muhtemelen mail alanını primary key yapmam lazım fakat varchar(50) olduğundan mı dır yoksa id alanının auto incornet olmasından mıdır bi türlü bulamadım . kayıt işlemleride seri bir şekilde 15 li yapılıyor yani sürekli bu varmı bunu kontrol et deyip sonra kayıt yaptırmak biraz işleri uzatır.
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
77
Konum
SEO
hocam benim de sorunum şu id alanı primari key birde email alanı var. Şimdi çift mail ile kayıt girilmemesi için mail alanını primery key yapmaya çalışıyorum şu hata çıkıyor.

ALTER TABLE `ytb` DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `mail` )

MySQL çıktısı: Belgeler
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

tabloyu silip yeniden denedim bu sefer id alanıyla mail alanını ikisini birden primery key yapıyor bu yüzden gene mail adresleri yeniden girile biliyor. Access gibi çalıştığını zannediyorum. Mysql i yeni yeni öğreniyorumda. Yani benim kayıtlı olan kayıtları girmemem için muhtemelen mail alanını primary key yapmam lazım fakat varchar(50) olduğundan mı dır yoksa id alanının auto incornet olmasından mıdır bi türlü bulamadım . kayıt işlemleride seri bir şekilde 15 li yapılıyor yani sürekli bu varmı bunu kontrol et deyip sonra kayıt yaptırmak biraz işleri uzatır.

PRIMARY KEY i drop etme, o autoincrement icin gerekli.
mail i tekil yapmak icin

ALTER TABLE `ytb` ADD UNIQUE (`mail` ) ;
 
Geri
Üst