Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpDbUp 210 of 280 menu
◀ ▶

Изменение строк в Go

Изменение записывает новые значения в уже существующие строки. В тексте запроса указывают столбцы и условие, какие строки трогать, а новые числа и строки передают параметрами.

Команда выполнения возвращает сводку без курсора. Ошибку проверяют сразу; отдельно можно посмотреть, сколько строк затронулось, если это нужно логике программы.

Поднимем цену одного товара:

package main import ( "database/sql" "fmt" "log" "os" _ "modernc.org/sqlite" ) func main() { os.Remove("shop.db") db, err := sql.Open("sqlite", "shop.db") if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } _, err = db.Exec(` CREATE TABLE goods ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, price REAL NOT NULL ) `) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO goods (title, price) VALUES (?, ?)`, "pen", 2.0, ) if err != nil { log.Fatal(err) } newPrice := 2.5 _, err = db.Exec( `UPDATE goods SET price = ? WHERE id = ?`, newPrice, 1, ) if err != nil { log.Fatal(err) } var price float64 err = db.QueryRow( `SELECT price FROM goods WHERE id = ?`, 1, ).Scan(&price) if err != nil { log.Fatal(err) } fmt.Println(price) }

На экране 2.5. Условие по id ограничило изменение одной строкой.

Переименуем позицию в заказе:

package main import ( "database/sql" "fmt" "log" "os" _ "modernc.org/sqlite" ) func main() { os.Remove("shop.db") db, err := sql.Open("sqlite", "shop.db") if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } _, err = db.Exec(` CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, qty INTEGER NOT NULL, price REAL NOT NULL ) `) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO orders (title, qty, price) VALUES (?, ?, ?)`, "mug", 3, 9.5, ) if err != nil { log.Fatal(err) } _, err = db.Exec( `UPDATE orders SET title = ? WHERE id = ?`, "cup", 1, ) if err != nil { log.Fatal(err) } var title string err = db.QueryRow( `SELECT title FROM orders WHERE id = ?`, 1, ).Scan(&title) if err != nil { log.Fatal(err) } fmt.Println(title) }

Даны строки goods:

1 pen 2 2 book 12

Составьте запрос, который поставит цене 11 у строки с id 2.

Дан заказ id=1, qty=3. Напишите запрос, который увеличит qty до 5 для этой строки.

Скажите, изменятся ли строки, если условие WHERE ни одной не затронуло, и будет ли при этом ошибка.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить