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

क्या आप केवल बदले गए फ़ील्ड या सभी फ़ील्ड अपडेट करते हैं?

मुझे लगता है कि यह बदलने लायक है - लेकिन शायद डालने से पहले चयन करने लायक नहीं है।

मैं केवल उन फ़ील्ड को अपडेट करता हूं जो बदल गए हैं, यह मेरे डीबीएंटिटी क्लास के संचालन का हिस्सा है जो एक सक्रिय रिकॉर्ड पैटर्न का पालन करता है। ऐसा करने में थोड़ा अतिरिक्त खर्च होता है क्योंकि मेरे पास वर्तमान रिकॉर्ड और मूल रिकॉर्ड हैं - जब भी कोई रिकॉर्ड लोड होता है तो बस कॉपी करना।

कारण संक्षिप्तता हैं - वास्तव में प्रदर्शन नहीं। इसके अलावा, आप अपडेट किए गए फ़ील्ड के पुराने मान पर एक क्लॉज़ जोड़कर समवर्ती संशोधन की जांच कर सकते हैं और उचित त्रुटि फेंक सकते हैं।

लिखने/अपडेट करने के तरीके में:

$s1 = "";

foreach ($this->record as $key => $value)
{
    // only update fields that have been changed
    if ($value != $this->orig_record[$key])
    {
        $s1 .= $comma."`$key`='".mysql_real_escape_string($value)."'";
        $comma = ", ";
    }
}

$query = "UPDATE ".$this->table." SET $s1 where {$this->id_field}='".$this->get_keyfield()."'";
$query .= $this->extra_sql_update;
mysql_query($query);

$ar = mysql_affected_rows();
//
// the number of affected rows is actually those changed by the update operation, which will 
// either be zero, or 1. If the query affects more than one row then we have a problem.
if ($ar < 0 || $ar > 1)
{
    cbf_error("cbf_dbentity: {$this->table} :: only one row (not $ar) must be affected by an insert operation. $query",
      E_USER_ERROR);
}
else
{
    $new_id = $this->get_keyfield();

    GlobalEventBus::notify_all(new AuditLogSQL($this->table, "update", $query));

}

$this->orig_record = Array();

foreach ($this->record as $key => $value)
    $this->orig_record[$key] = $value;


//
// sanity check - ensure that what we have just written is actually there.

$this->load($new_id);

foreach ($this->orig_record as $key => $value)
    if (trim($this->record[$key]) != trim($value) 
        && (!$this->record[$key] == "0" && $value=""))
        cbf_error("cbf_dbentity: {$this->table} :: record differs during write after reload: field $key was \"$value\", after write it is now \"".
              $this->record[$key]."\"",E_USER_ERROR);

लोड विधि में

$this->orig_record = Array();
foreach ($this->record as $key => $value)
    $this->orig_record[$key] = $value;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय होस्ट से डोकर MySQL कंटेनर से कनेक्ट करें?

  2. mysql का उपयोग करके परिणाम सेट से अंतिम 4 पंक्तियों को लाने का सबसे अच्छा तरीका

  3. java.sql.Time वस्तु java.sql.Date वस्तु के साथ भ्रमित हो रही है

  4. प्रत्येक उपयोगकर्ता के लिए एक ही तालिका में रिकॉर्ड डालने से पहले मौजूदा रिकॉर्ड कैसे जांचें?

  5. MySQL में डेटाटाइम कॉलम से दिनांक कैसे प्राप्त करें