Условие
Какая операция не меняет количество строк в таблице?
- A)
INSERT - B)
UPDATE - C)
DELETE - D)
TRUNCATE
Решение
Правильный ответ: B (UPDATE).
UPDATE изменяет значения в существующих строках, но не добавляет и не удаляет их. Количество строк остаётся прежним.
| Команда | Что делает | Влияет на счётчик строк? |
|---|---|---|
INSERT |
Добавляет новые строки | Да, +N |
UPDATE |
Меняет значения столбцов в существующих строках | Нет |
DELETE |
Удаляет строки (по WHERE или все) |
Да, −N |
TRUNCATE |
Удаляет все строки (быстро, без журналирования) | Да, до 0 |
Замечание про DELETE vs TRUNCATE
DELETE FROM t— удаляет все строки построчно, пишет в лог транзакций, можно откатить. Триггеры срабатывают.TRUNCATE TABLE t— операция уровня DDL: освобождает страницы, сбрасывает счётчики, не пишет в журнал построчно. Быстрее, но нельзя откатить в некоторых СУБД (в PostgreSQL — можно в транзакции).
Подвох с UPDATE
UPDATE всё-таки может косвенно «потерять» строки, если триггер BEFORE UPDATE или INSTEAD OF удалит строку, или если ограничение CHECK уронит транзакцию целиком. Но сам UPDATE как команда — нет.
Подводные камни
UPDATE x SET id = id + 1дляPRIMARY KEY. Может упасть из-за нарушения уникальности, но количество строк не изменится при успехе.MERGE/UPSERT(PostgreSQLINSERT ... ON CONFLICT). Могут одновременно вставлять и обновлять — количество строк может расти.DELETEбезWHERE. Удаляет всю таблицу.WHERE 1=0— ничего не удаляет (0 строк).
Эталонный ответ
B (UPDATE) — единственная из перечисленных, не изменяющая количество строк.