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

Удаление строк в Go

Удаление убирает строки, которые подошли под условие. Без условия запрос может очистить всю таблицу, поэтому в учебных примерах условие пишут явно.

Как и при вставке или изменении, текст запроса выполняют без курсора, а значения в WHERE передают параметрами. После успеха можно снова сделать выборку и посчитать, что осталось.

Удалим один товар по идентификатору:

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) } _, err = db.Exec( `INSERT INTO goods (title, price) VALUES (?, ?)`, "book", 12.0, ) if err != nil { log.Fatal(err) } _, err = db.Exec( `DELETE FROM goods WHERE id = ?`, 1, ) if err != nil { log.Fatal(err) } var count int err = db.QueryRow( `SELECT COUNT(*) FROM goods`, ).Scan(&count) if err != nil { log.Fatal(err) } fmt.Println(count) }

На экране 1. Осталась только строка с "book".

Очистим заказы с нулевым количеством:

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", 0, 9.5, ) if err != nil { log.Fatal(err) } _, err = db.Exec( `INSERT INTO orders (title, qty, price) VALUES (?, ?, ?)`, "pen", 2, 2.0, ) if err != nil { log.Fatal(err) } _, err = db.Exec( `DELETE FROM orders WHERE qty = ?`, 0, ) if err != nil { log.Fatal(err) } rows, err := db.Query(`SELECT title FROM orders`) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var title string err = rows.Scan(&title) if err != nil { log.Fatal(err) } fmt.Println(title) } err = rows.Err() if err != nil { log.Fatal(err) } }

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

1 pen 2 2 book 12 3 mug 9

Составьте запрос, который удалит строки с ценой меньше 5, с параметром порога.

Дана таблица orders с одной строкой id=5. Напишите запрос удаления только этой строки по id.

Скажите, чем опасен запрос DELETE без WHERE для учебного файла shop.db.

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