Я в настоящее время борется (мой второй день), чтобы найти лучший способ сделать несколько запросов и задавался вопросом, знаете ли вы решение.Идиоматический способ сделать несколько запросов в golang за одну транзакцию
У меня есть открытое * sql.DB соединение, названное MyDB и использовать гоу-SQL-драйвер
func TruncateGalleryImport() error {
s := make([]string, 0)
s = append(s, "TRUNCATE TABLE add_map")
s = append(s, "TRUNCATE TABLE album")
s = append(s, "TRUNCATE TABLE album_permission")
s = append(s, "TRUNCATE TABLE album_view")
s = append(s, "TRUNCATE TABLE album_watch")
s = append(s, "TRUNCATE TABLE media")
s = append(s, "TRUNCATE TABLE media_user_view")
s = append(s, "TRUNCATE TABLE media_view")
s = append(s, "TRUNCATE TABLE media_watch")
s = append(s, "TRUNCATE TABLE private_map")
s = append(s, "TRUNCATE TABLE attachment")
s = append(s, "TRUNCATE TABLE attachment_data")
for _, q := range s {
_, err := myDb.Exec(q)
if err != nil {
return err
}
}
return nil
}
Можно ли совершать все вышеперечисленные вопросы вместе, используя только одну транзакцию?
Приветствие
Остерегайтесь: он работает только для двигателей баз данных, чья инструкция truncate является транзакционной. Для некоторых из них (Oracle, MySQL) это не так. Таблица усечений обычно реализуется как операция DDL, а не DML. –
Отличная помощь! Благодарим за включение заявления о дефере! – Alex
Чтобы быть понятным, некоторые MySQL-движки ('InnoDB') поддерживают транзакции, тогда как другие (' MyISAM') этого не делают. – carbocation