Назначение и основные возможности команды Команда UPDATE предназначена для изменения всех или части строк в таблице, представлении или курсоре в зависимости от задаваемых условий коррекции. Право на изменение строк таблицы устанавливается для отдельных пользователей командами GRANT и REVOKE.

Базовый синтаксис команды UPDA TE

UPDATE [TRANSACTION transaction] {table | view}

SET LIST_<sets> WHERE <search_condition> | WHEEE CURRENT

OF cursor] ;

<sets> ::= col = <val>

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

UPDATE [TRANSACTION transa ction] {table | view} j

SET LIST_<sets> WHERE <search_condition>

<val> :: = {

col [<array_dim>] | : variable

| <constant> | <expr> | <function>

| udf ( [ <val> [, <val> ...]])

| NULL | USER | ?}

[COLLATE collation]

<Array_dim> [LIST_Dim]

Dim ::.= /x:/y

у - задает размерность массива.

х - задает нижнюю границу массива (если задано х:у, то индекс в массиве меняется от х до у)

<constant> ::= num | ' string' | charsetname ' string'

<expr> ::= любое допустимое в SQL выражение, имеющее своим результатом единственное значения для столбца <function> {

CAST ( <val> AS <datatype>)

| UPPER (<val>)

| GEN_ID ( generator, <val>)

} "

В версиях InterBase, начиная с 6, допустимо использовать также функцию EXTRACT(part FROM <DTExpr>).

part ::= /DAY | HOUR | MINUTE | MONTH | SECOND |

WEEKDAY|YEAR|YEARDAY]

<DTExpr> ::= Любое корректное SQL выражение, дающее в результате единственное значение типа дата - время.

udf - пользовательская функция

<search_condition> ::= { <val> <operator> { <val> | (<select_one>)/

<val> NOT BETWEEN <val> AND <val>

<val> /NOT] LIKE <val> /ESCAPE <val>]

<val> /NOT/ IN ( SET_<val> | <select_list>)

<val>IS NOT NULL <val> { /NOT/ = | < | >} | >= | <=}

' ALL | SOME | ANY/ (<select_list>)

EXISTS (<select_expr>)

SINGULAR (<select_expr>)

<val> NOT CONTAINING <val>

<val> NOT STARTING /WITH/<val>

(<search_condition>)

NOT <search_condition>

<search_condition> OR <search_condition>

<search_condition> AND <search_condition>/

Подробное описание конструкции <search_condition>, задающей условия выборки данных, и соответствующие примеры даны в описании команды SELECT.

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

Конструкция SET задает перечень изменяемых столбцов и их новых значений.

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

Конструкция WHERE задает условия обновления. Она полностью идентична одноименной конструкции в команде SELECT, так что здесь нет необходимости в ее подробном описании.

Задание условийобновления. Обновлениегруппы строк При обновлении данных одной командой можно внести изменения в одну или несколько строк.

Основной режим обновления состоит в изменении значений одного или нескольких столбцов в конкретной строке таблицы. В этом случае конструкция WHERE имеет вид

WHERE <coll>=<vall> [and <col2>=<val2> ...] .

Здесь coll, col2, ... - список полей, образующих уникальный ключ в таблице. Использование уникального ключа гарантирует, что изменению не будут подвергнуты никакие посторонние строки таблицы.

Рассмотрим изменение номера читательского билета у читателя (например, при процедуре перерегистрации). Использование фамилии при подобном действии опасно, поскольку нет никакой гарантии, что у нас нет однофамильцев, а тогда всем им будет приписан один и тот же номер билета, что, конечно же, недопустимо.

Пример 3.47

UPDATE TREADER SET RDNUMB='1278-98' where UNIKEY=39;

В результате выполнения команды изменится значение строки таблицы с кодом 39.

Изменение можно отследить командой SELECT:

select * from TREADER where unikey=39;

Соответствующие изменения видны из табл. 3.35.

Таблица 3.35. Содержание TREADER до и после ввода изменений

UNIKEY RDNUMB RDNAME
До ввода изменений 39 1273-92 Гребенкина Н.
После ввода изменений 39 1278-98 Гребенкина Н.

В данном примере изменялось только одно поле. Рассмотрим аналогичное изменение, но с несколькими полями.

UPDATE TREADER SET RDNUMB=’1278-98’,

RDNAME= Еребенкина H.’ where UNIKEY=39;

Необходимость в групповых изменениях возникает значительно реже. Более того, часто тот факт, что необходимо ввести сразу много однотипных изменений в базу данных, свидетельствует о том, что данные не были должным образом нормализованы. Тем не менее, такая процедура иногда может быть очень полезна. Например, при изменении срока, на который выдаются книги на месяц, необходимо изменить столбец FIRSTDATE на 30 дней и соответственно изменить столбец NEXTDATE так, чтобы он не превосходил столбец FIRSTDATE во всей таблице. Это можно сделать двумя командами UPDATE.

3.2. добавление данных. команда insert | Введение в InterBase | 3.4. удаление данных. команда delete


Введение в InterBase



Новости за месяц

  • Февраль
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс