Delete query is called while updating the value of node Delete query is called while updating the cck field value of node.

After debugging i find following code in 


  var/www/drupal-7.40/modules/field/modules/field_sql_storage/field_sql_storage.module


in field_sql_storage_field_storage_write($entity_type, $entity, $op, $fields)

we have following code

// Delete and insert, rather than update, in case a value was added.
if ($op == FIELD_STORAGE_UPDATE) {
  // Delete languages present in the incoming $entity-&gt;$field_name.
  // Delete all languages if $entity-&gt;$field_name is empty.
  $languages = !empty($entity-&gt;$field_name) ? $field_languages : $all_languages;
  if ($languages) {
    db_delete($table_name)
      -&gt;condition('entity_type', $entity_type)
      -&gt;condition('entity_id', $id)
      -&gt;condition('language', $languages, 'IN')
      -&gt;execute();
    db_delete($revision_name)
      -&gt;condition('entity_type', $entity_type)
      -&gt;condition('entity_id', $id)
      -&gt;condition('revision_id', $vid)
      -&gt;condition('language', $languages, 'IN')
      -&gt;execute();
  }
}


May be someone explain why ?
And also can i use update Query instead of delete, insert ?
As the comment at the top states: Delete and insert, rather than update, in case a value was added.

So to make sure all old data is cleared, the records are deleted and re-added with new data (as you can see on line 481: $query = db_insert($table_name)-&gt;fields($columns);.

Of course you could use the update query, but this query would need to contain all fields because it is impossible to know which fields are added, modified or deleted. A simple delete and add solves that problem.