Почему Create () вызывает запрос Select в golang GORM? - PullRequest
0 голосов
/ 10 июня 2019

Я только что узнал, когда я звоню db.Create(), будут два SQL-запроса: insert и select.В частности, запрос выбора:

SELECT "num", "my_text", "my_int" FROM "product"  WHERE (id = 2)

(1) Почему он вызывает запрос выбора?Без этого производительность должна быть еще лучше.

(2) Зачем выбирать эти три столбца?В этой таблице 18 столбцов.Я не нахожу общих отношений между тремя колонкамиОни все разные типы.

Большое спасибо.

1 Ответ

0 голосов
/ 10 июня 2019

Кажется, я понял, почему.Пожалуйста, исправьте меня, если я ошибаюсь.

Например, когда я делаю db.Create(&product),

(1) GORM загрузит значения полей, которые он не знает, из базы данныхк переменной product.

(2) Причина, по которой он выбирает только три поля, состоит в том, что я не предоставляю эти значения в исходной переменной product, а GORM не знает, что это за значениябудет, таким образом, выберите эти поля и затем присвойте их product.Например, num - это последовательный номер с автоинкрементом.

(3) Если я предоставлю значения всех полей для product до создания строки, GORM не будет вызывать select после insert.


Кстати, GORMне очень умен в этом, потому что my_text имеет значение по умолчанию в определении, например

MyText string `gorm:"default:'abc'"`

Таким образом, даже если я не укажу поле, GORM должен знать, что такое значение my_text инет необходимости выбирать его больше.Но как бы то ни было, это может быть именно так, как сейчас разрабатывает GORM

...