code: func (h *BindHandle) DropBindRecord(record *BindRecord) (err error) {
  	exec, _ := h.sctx.Context.(sqlexec.SQLExecutor)
  	h.sctx.Lock()
  
  	_, err = exec.Execute(context.TODO(), "BEGIN")
  	if err != nil {
  		h.sctx.Unlock()
  		return
  	}
  
  	defer func() {
  		if err != nil {
  			_, err1 := exec.Execute(context.TODO(), "ROLLBACK")
  			h.sctx.Unlock()
  			terror.Log(err1)
  			return
  		}
  
  		_, err = exec.Execute(context.TODO(), "COMMIT")
  		h.sctx.Unlock()
  		if err != nil {
  			return
  		}
  
  		hash, meta := newBindMetaWithoutAst(record)
  		h.removeBindMeta(hash, meta)
  	}()
  
  	txn, err1 := h.sctx.Context.Txn(true)
  	if err1 != nil {
  		return err1
  	}
  
  	updateTs := types.Time{
  		Time: types.FromGoTime(oracle.GetTimeFromTS(txn.StartTS())),
  		Type: mysql.TypeDatetime,
  		Fsp:  3,
  	}
  	record.Status = deleted
  	record.UpdateTime = updateTs
  
  	_, err = exec.Execute(context.TODO(), h.logicalDeleteBindInfoSQL(record.OriginalSQL, record.Db, updateTs))
  	return err
  }
docs: // DropBindRecord drops a BindRecord to the storage and BindMeta int the cache.