phpMyAdmin gibi mysql dökümü yaratıyor

4 Cevap php

Ben bir tablo üzerinde büyük bir veri alan bir komut var. Ben farklı alanları ile başka bir veritabanı tabloya veri eklemek için bir mysqldump oluşturmak istiyorum. Ben Tablo DEĞERLERİ (DEĞERLER1) INSERT INTO tekrarlar phpMyAdmin'in biçimini istiyorum, (values2), ... (values100); değer kümeleri belirli miktarda ulaşırsa set bağlıdır.

ex: Ben 550 veri setleri var ve ben sorgu INSERT INTO 6 takım var olacak, böylece 100 ile veri devided istiyorsanız.

INSERT INTO tablename VALUES(value1), (value2), .... (value100);
INSERT INTO tablename VALUES(value101), (value102), .... (value200);
INSERT INTO tablename VALUES(value201), (value202), .... (value300);
INSERT INTO tablename VALUES(value301), (value302), .... (value400);
INSERT INTO tablename VALUES(value401), (value402), .... (value500);
INSERT INTO tablename VALUES(value501), (value502), .... (value550);

4 Cevap

Eğer mysqldump kullanarak ve tek bir insert içine çıkış mutiple satır istiyorsanız eğer, o zaman kullanmanız gerekir - genişletilmiş takın seçeneği:

mysqldump extended insert option

Ben satır belirli sayıda dökümü üretilen her INSERT tablosuna dahil olduğunu belirtmek için mysqldump ile belirtmek mümkün olduğundan emin değilim. Aksine (o bunu değiştirebilirim tavsiye olmasa da) size net_buffer_length ayarlayabilirsiniz, böylece gerçek miktarı her satırda verilere bağlı olarak değişebilir.

Satırları alınırken, bir sayaç artırmak ve belli bir değere çarptığında, yeni bir ekleme deyimi oluşturmak var?

(UZUN süre için hiçbir PHP) doğru olmayabilir, ama muhtemelen fikir alacak bazı kod

$i = 0;
$insertstatements = array();
$currentinsertstatement;

while ($temp = mysql_fetch_assoc($result)) {
  // do something with the data
  $insertpart = "(value_xxx)";
  if ($i % 100 == 0) {
    // first value
    if ($i != 0) $insertstatements[count($insertstatements)] = $currentinsertstatement;
    $currentinsertstatement = "INSERT INTO tablename VALUES " . $insertpart;
  } else {
    $currentinsertstatement .= ", " . $insertpart;
    // somewhere in the middle of the insert statement
  }
  $i++;
}
if ($i % 100 != 0) {
  $insertstatements[count($insertstatements] = $currentinsertstatement;
}

Kesinlikle depolama motoru (InnoDB gibi) bunları destekliyorsa, büyük uçlar için işlemler kullanmak gerekir:

BEGIN;
INSERT INTO tablename VALUES...
INSERT INTO tablename VALUES...
COMMIT;

Bir şey yanlış giderse, güvenle, vb size komut yeniden, son işlemi yapabilirsiniz rollback