Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ - MySQL डेटाबेस में बड़ी सरणी डालें

हालांकि मुझे अभी भी संदेह है कि लेन-देन और/या बैच इंसर्ट आपकी संसाधन उपयोग समस्या का एक व्यवहार्य समाधान है, फिर भी वे डेव द्वारा सुझाए गए बड़े बयानों को तैयार करने की तुलना में एक बेहतर समाधान हैं।

इन्हें आज़माएं और देखें कि क्या ये मदद करते हैं।

निम्नलिखित मानता है कि पीडीओ का त्रुटि प्रबंधन मोड अपवादों को फेंकने के लिए सेट है। उदाहरण:$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); यदि, किसी कारण से, आप अपवाद मोड का उपयोग नहीं कर सकते हैं, तो आपको execute() की वापसी की जांच करनी होगी हर बार और अपना अपवाद फेंकें।

एकल लेन-देन:

$sql = $db->prepare("INSERT INTO players (name, level, vocation, world, month, today, online) VALUES (:name, :level, :vocation, :world, :time, :time, :online) ON DUPLICATE KEY UPDATE level = :level, vocation = :vocation, world = :world, month = month + :time, today = today + :time, online = :online");

$db->beginTransaction();
try {
    foreach ($players as $player) {
        $sql->execute([
            ":name" => $player->name,
            ":level" => $player->level,
            ":vocation" => $player->vocation,
            ":world" => $player->world,
            ":time" => $player->time,
            ":online" => $player->online
        ]);
    }
    $db->commit();
} catch( PDOException $e ) {
    $db->rollBack();
    // at this point you would want to implement some sort of error handling
    // or potentially re-throw the exception to be handled at a higher layer
}

बैच लेनदेन:

$batch_size = 1000;
for( $i=0,$c=count($players); $i<$c; $i+=$batch_size ) {
    $db->beginTransaction();
    try {
        for( $k=$i; $k<$c && $k<$i+$batch_size; $k++ ) {
            $player = $players[$k];
            $sql->execute([
                ":name" => $player->name,
                ":level" => $player->level,
                ":vocation" => $player->vocation,
                ":world" => $player->world,
                ":time" => $player->time,
                ":online" => $player->online
            ]);
        }
    } catch( PDOException $e ) {
        $db->rollBack();
        // at this point you would want to implement some sort of error handling
        // or potentially re-throw the exception to be handled at a higher layer
        break;
    }
    $db->commit();
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phpMyAdmin MySQL 8.0 . पर

  2. SQL को कुछ उपयोगकर्ता से/के लिए अंतिम संदेश मिलते हैं

  3. mysql सर्वर में स्थायी डिफ़ॉल्ट टाइमज़ोन कैसे सेट करें?

  4. MySQL में लेन-देन-सुरक्षित SEQUENCE का अनुकरण करना

  5. JDBC ReadyedStatement के परिणामस्वरूप MySQL सिंटैक्स त्रुटि होती है