Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

db_lectures / 07. Добавление, обновление и удаление данных

.docx
Скачиваний:
36
Добавлен:
21.05.2015
Размер:
17.07 Кб
Скачать

Вставка данных

Сразу после создания таблицы, она не содержит никаких данных. Первое, что нужно сделать перед тем как использовать базу данных - это вставить в неё данные. Данные концептуально вставляются по одной строке за раз. Конечно, вы можете также вставить более, чем одну строку, но не существует способа вставить меньше одной строки. Даже если вы знаете только несколько значений колонок строки, вы должны создать полную строку.

Чтобы создать новую строку, используйте команду INSERT.

INSERT INTO table [ ( column [, ...] ) ]

{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

Эта команда требует имя таблицы и значения колонок таблицы.

CREATE TABLE products (

product_no integer,

name text,

price numeric

);

Для вставки строки можно использовать например такую команду:

INSERT INTO products VALUES (1, 'Cheese', 9.99);

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

Показанный выше синтаксис создаёт проблемы, потому что требует знания порядка колонок в таблице. Чтобы избежать этой проблемы вы можете также использовать задаваемый явно список колонок. Например, обе следующих команды в итоге сработают точно также как и та, что дана выше:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);

INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

Многие пользователи считают хорошей практикой всегда использовать список имён колонок.

Если у вас нет значений для всех колонок, вы можете опустить некоторые из них. В этом случае, колонки в строке будут заполнены значениями по умолчанию. Например:

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');

INSERT INTO products VALUES (1, 'Cheese');

Вторая форма является расширением PostgreSQL. При этом заполнение колонок идёт слева, согласно указанным значениям, а оставшиеся колонки будут заполнены значениями по умолчанию.

Для ясности, вы можете также явно указать значения по умолчанию для каждой колонки в строке или даже всей строки:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);

INSERT INTO products DEFAULT VALUES;

Вы можете вставить несколько строк одной командой:

INSERT INTO products (product_no, name, price) VALUES

(1, 'Cheese', 9.99),

(2, 'Bread', 1.99),

(3, 'Milk', 2.99);

Когда единовременно вставляется большое количество данных, используется команда COPY. Она не так удобна как команда INSERT, но зато более эффективна.

Обновление данных

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

Чтобы обновить существующие строки, используйте команду UPDATE.

UPDATE [ ONLY ] table [ [ AS ] alias ]

SET { column = { expression | DEFAULT } |

( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...]

[ FROM fromlist ]

[ WHERE condition | WHERE CURRENT OF cursor_name ]

Она требует три части информации:

  • Имя таблицы и колонки для обновления

  • Новое значение колонки

  • Информацию о том какую строку(и) нужно обновить

Хотя SQL не поддерживает такую возможность, обычно, для каждой строки предоставляется уникальный идентификатор. Таким образом, не всегда возможно прямое указание строки для обновления. Вместо этого вы можете задать условия, согласно которым и будут обновляться строки. Только если в таблице у вас есть первичный ключ, вы можете надёжно сослаться на отдельные строки, путём создания условия, которое использует совпадение по первичному ключу.

UPDATE products SET price = 10 WHERE price = 5;

Может случиться, что в результате работы этой команды будут обновлены ноль, одна или несколько строк.

Новое значение колонки может быть любым выражением, а не только константой. Например, если вы хотите поднять цену на все продукты на 10%, вы можете сделать так:

UPDATE products SET price = price * 1.10;

Если предложение WHERE опускается, то обновлены будут все строки в таблице. Конечно, условие WHERE необязательно должно быть сравнением. Доступны и многие другие операторы. Но в итоге выражение должно возвращать логический результат (истина или ложь -- прим.пер.).

Вы можете обновить более чем одну колонку в команде UPDATE, путём перечисления более чем одного присваивания в предложении SET. Например:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

Удаление данных

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

Для удаления строк, используйте команду DELETE; синтаксис команды очень похож на команду UPDATE.

DELETE FROM [ ONLY ] table [ [ AS ] alias ]

[ WHERE condition | WHERE CURRENT OF cursor_name ]

Например, чтобы удалить все строки из таблицы products, в которых значение колонки price равно 10, используйте:

DELETE FROM products WHERE price = 10;

Если вы просто пишите DELETE FROM products; то все строки в таблице будут удалены!