Veri Tabanındaki Mükerrer Kayıtlar
-
MySQL mimarisinde storage engine ayri bir layer'dir. Dusuk seviyeli api ile storage engine ve SQL arasinda iletisim kurulur. Bu yuzden degisik "storage engine" ler vardir.
Eger tablolarin MyISAM storage engine ise auto-commit modunda calisiyorlar. Bu engine'i transaction engine degildir. Onun yerine InnoDB kullan ki transactionlarini yakalasin.
Birde hangi dille gonderiyorsun ? Arada baska layer veya API , Service fln olmasin. Kullandigin COnnectorda sikinti olmasin BUG fln.
-
@dhmm MyISAM, yapıştırmayı unutmuşum. Python ile gönderiyorum, veri içeren tabloları InnoDB 'ye çevirsem sorun olur mu? Bir de tablo birden fazla yerden gelen veriyle güncelleme ve ekleme işlemi yapılıyor bağımsız çalışan iki ayrı script tarafından sanırım bu yüzden de InnoDB olması daha mı uygun oluyor?
db = MySQLdb.connect("192.100.1.100","root","_","db1", charset="utf8", init_command="SET NAMES UTF8" ) cursor = db.cursor()
Conncetor kısmıda bu şekilde
-
yawuz bunu yazdı
@dhmm MyISAM, yapıştırmayı unutmuşum. Python ile gönderiyorum, veri içeren tabloları InnoDB 'ye çevirsem sorun olur mu? Bir de tablo birden fazla yerden gelen veriyle güncelleme ve ekleme işlemi yapılıyor bağımsız çalışan iki ayrı script tarafından sanırım bu yüzden de InnoDB olması daha mı uygun oluyor?
db = MySQLdb.connect("192.100.1.100","root","_","db1", charset="utf8", init_command="SET NAMES UTF8" ) cursor = db.cursor()
Conncetor kısmıda bu şekilde
@yawuz hocam, oncelikle db'nin backup'ini al kesinlikle.
Tablolarini MyISAM'dan InnnoDB'ye cevirebilirsin ama sistem tablolarini cevirmeye kalkma cunku bu desteklenmeyen bir islemdir. ALTER TABLE tabloadi ENGINE=InnoDB; komutu ile cevirirsin.
Sadece InnoDB yetmiyor ama transactionlarida begin, commit, rollback fln yazman gerek. Ayrica autocommit'i False de yap gonderirken.
Mesela :
import MySQLdb db = MySQLdb.connect("192.100.1.100","root","_","db1", charset="utf8", init_command="SET NAMES UTF8" ) db.autocommit(False) cursor = db.cursor() try: cursor.execute("INSERT INTO bilmemne .... (komut buraya)") db.commit() except: db.rollback()
Ayrica bir oneri; Eger bu sekilde cosulmezse ve merkezi bir insert fonksiyonun varsa oraya bir log tutma olayi koy ve bak bakalim hangi script bunu yapiyor.