Postgres Pro Standard : Документация: 9.5: 6.2. Изменение данных : Компания Postgres Professional
RU
EN
RU EN
Модификация данных, уже сохранённых в БД, называется изменением. Изменить можно все строки таблицы, либо подмножество всех строк, либо только избранные строки. Каждый столбец при этом можно изменять независимо от других.
Для изменения данных в существующих строках используется команда UPDATE. Ей требуется следующая информация:
Имя таблицы и изменяемого столбца
Новое значение столбца
Критерий отбора изменяемых строк
Если вы помните, в Главе 5 говорилось, что в SQL в принципе нет уникального идентификатора строк. Таким образом, не всегда возможно явно указать на строку, которую требуется изменить. Поэтому необходимо указать условия, каким должны соответствовать требуемая строка. Только если в таблице есть первичный ключ (вне зависимости от того, объявляли вы его или нет), можно однозначно адресовать отдельные строки, определив условие по первичному ключу.
Например, следующая команда увеличивает цену всех товаров, имевших до этого цену 5, до 10:
UPDATE products SET price = 10 WHERE price = 5;
В результате может измениться ноль, одна или множество строк. И если этому запросу не будет удовлетворять ни одна строка, это не будет ошибкой.
Давайте рассмотрим эту команду подробнее. Она начинается с ключевого слова UPDATE
, за которым идёт имя таблицы. Как обычно, имя таблицы может быть записано в полной форме, в противном случае она будет найдена по пути. Затем идёт ключевое слово SET
, за которым следует имя столбца, знак равенства и новое значение столбца. Этим значением может быть любое скалярное выражение, а не только константа. Например, если вы захотите поднять цену всех товаров на 10%, это можно сделать так:
UPDATE products SET price = price * 1.10;
Как видно из этого примера, выражение нового значения может ссылаться на существующие значения столбцов в строке. Мы также опустили в нём предложение WHERE
. Это означает, что будут изменены все строки в таблице. Если же это предложение присутствует, изменяются только строки, которые соответствуют условию WHERE
. Заметьте, что хотя знак равенства в предложении SET
обозначает операцию присваивания, а такой же знак в предложении WHERE
используется для сравнения, это не приводит к неоднозначности. И конечно, в условии WHERE
не обязательно должна быть проверка равенства, а могут применяться и другие операторы (см. Главу 9). Необходимо только, чтобы это выражение возвращало логический результат.
В команде UPDATE
можно изменить значения сразу нескольких столбцов, перечислив их в предложении
. Например:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
Тип sql
Тип sql Пожалуйста, включите JavaScript в браузере!Тип sql
Тип sql используется для связи с SQL. Настройки коннектора разделены на три блока:
- Общие параметры коннектора.
- Параметры определенного SQL-подключения. Таких подключений в одном коннекторе может быть более одного.
- Дополнительные параметры коннектора.
Общие параметры коннектора
Общие параметры коннектора расположены на закладке Основные параметры:
- Название (обязательно) – уникальное имя для этого типа ресурса. Должно содержать от 1 до 128 символов Юникода.
- Тенант (обязательно) – название тенанта, которому принадлежит ресурс.
- Тип (обязательно) – тип коннектора.
- Запрос по умолчанию (обязательно) – поле для SQL-запроса, общего для всех подключений коннектора.
- Интервал запросов, сек. – время между SQL-запросами в секундах. Значение по умолчанию: 10 секунд.
- Описание – описание ресурса: до 256 символов Юникода.
Если для определенного подключения (см. ниже) указаны свои запрос и/или интервал запросов, для этого подключении будут использоваться указанные в нем значения.
Параметры определенного SQL-подключения
Общие параметры коннектора расположены на закладке Основные параметры. В одном коннекторе можно создать несколько подключений, добавляя новые с помощью кнопки Добавить подключение. Удалить подключения можно с помощью кнопки .
Параметры подключения:
- URL (обязательно) – раскрывающийся список для выбора ресурса секрета, в котором хранится список строк с запросами на SQL-подключения. Формат строки зависит от конкретной базы данных (см. ниже поддерживаемые типы SQL).
Коды специальных символов
Доступные форматы адресов сервера: hostname:port, IPv4:port, IPv6:port.
При необходимости секрет можно создать в окне создания коннектора с помощью кнопки . Выбранный секрет можно изменить, нажав на кнопку .
- Столбец идентификатора (обязательно) – название столбца, который будет принят за столбец идентификаторов.
- Начальное значение идентификатора (обязательно) – значение в столбце идентификатора, по которому будет определена строка, с которой требуется начать считывание данных из SQL-таблицы.
- Запрос – поле для SQL-запросов. Если у определенного подключения в коннекторе указан запрос, он будет использоваться вместо запроса, указанного в поле Запрос по умолчанию.
- Интервал запросов, сек. – время между SQL-запросами в секундах. Значение по умолчанию: 10 секунд. Если у определенного подключения в коннекторе указан интервал запросов, этот интервал будет использоваться вместо общего интервала запросов коннектора.
С помощью параметров URL, Столбец идентификатора и Начальное значение идентификатора определяется одно SQL-подключение. Строка, до которой были получены данные из SQL-таблицы, сохраняется в коллекторе KUMA, из которого был сделан запрос в базу данных SQL. Это позволяет считывать данные из SQL-таблицы с последней прочитанной строки. Идентификатор последней прочитанной строки не меняется при указании в коннекторе иного URL или запроса. Для изменения строки, начиная с которой будут получены данные из SQL-таблицы, необходимо изменить значение полей Начальное значение идентификатора и/или Столбец идентификатора.
Дополнительные параметры коннектора
Дополнительные параметры коннектора расположены на закладке Дополнительные параметры:
- Кодировка символов – параметр для установки кодировки символов. Значение по умолчанию:
UTF-8
.KUMA может обрабатывать ответы SQL в кодировке UTF-8. Настройте SQL-сервер на отправку сообщений в кодировке UTF-8 или принудительно меняйте кодировку входящих сообщений на UTF-8, выбрав этот вариант в раскрывающемся списке Кодировка символов в настройках коннектора.
- Отладка – раскрывающийся список, в котором можно указать, будет ли включено логирование ресурса. По умолчанию указывается значение Выключено.
Поддерживаемые типы SQL и особенности их использования
Оператор UNION не поддерживается коннекторами типа SQL.
Поддерживаются следующие типы SQL:
- MSSQL
Примеры URL:
sqlserver://{user}:{password}@{server:port}/{instance_name}?database={database}
– (рекомендуемый вариант)sqlserver://{user}:{password}@{server}?database={database}
В качестве плейсхолдера в SQL-запросе используются символы
@p1
.Если вам требуется подключиться с доменными учетными данными, укажите имя учетной записи в формате
<домен>%5C<пользователь>
. Например:sqlserver://domain%5Cuser:[email protected]:1433/SQLEXPRESS?database=KAV
. - MySQL
Пример URL:
mysql://{user}:{password}@tcp({server}:{port})/{database}
В качестве плейсхолдера в SQL-запросе используются символы
%s
. - PostgreSQL
Пример URL:
postgres://{user}:{password}@{server}/{database}?sslmode=disable
В качестве плейсхолдера в SQL-запросе используются символы
$1
. - CockroachDB
Пример URL:
postgres://{user}:{password}@{server}:{port}/{database}?sslmode=disable
В качестве плейсхолдера в SQL-запросе используются символы
$1
. - SQLite3
Пример URL:
sqlite3://file:{file_path}
В качестве плейсхолдера в SQL-запросе используется знак вопроса:
?
. - Oracle DB
Пример URL:
oracle://{user}/{password}@{server}:{port}/{service_name}
Используется синтаксис Easy Connect. В качестве плейсхолдера в SQL-запросе используется символы
:val
.При обращении к Oracle DB, если начальное значение идентификатора используется в формате datetime, в SQL-запрос нужно добавить преобразование даты с помощью функции Oracle
to_timestamp_tz
. Например,select * from connections where login_time > to_timestamp_tz(:val, 'YYYY-MM-DD"T"Hh34:MI:SSTZH:TZM')
. В этом примереConnections
– это таблица Oracle DB, а значение переменной:val
берется из поля Начальное значение идентификатора, поэтому его требуется указывать в формате с timezone (например,2021-01-01T00:10:00+03:00
).Для обращения к Oracle DB необходимо установить пакет libaio1.
- Firebird® SQL
Пример URL:
firebirdsql://{user}:{password}@{server}:{port}/{database}
В качестве плейсхолдера в SQL-запросе используется знак вопроса:
?
.
В SQL-запросах поддерживается последовательный запрос сведений из базы данных. Например, если в поле Запрос указать запрос
, то при первом обращении к таблице в качестве значения плейсхолдера будет использоваться значение поля Начальное значение идентификатора. При этом в сервисе, в котором используется SQL-коннектор, сохраняется идентификатор последней прочитанной записи, и во время следующего обращения к базе данных в качестве значения плейсхолдера в запросе будет использоваться идентификатор этой записи.
Примеры SQL-запросов
В начало
Данные обновления PostgreSQL в таблице
Здесь вы узнаете, как обновить данные в таблице в базе данных PostgreSQL.
В PostgreSQL используйте оператор UPDATE, чтобы изменить существующие данные в таблице. Оператор UPDATE только обновляет данные в таблице и не изменяет структуру таблицы.
ОБНОВЛЕНИЕ <имя_таблицы> УСТАНОВИТЬ <столбец1> = <значение1>, <столбец2> = <значение2>, ... ГДЕ <условие> ВОЗВРАЩЕНИЕ * | <выходное_выражение> AS <выходное_имя>;
В приведенном выше синтаксисе:
- Укажите имя таблицы, данные которой вы хотите обновить, после ключевого слова UPDATE.
- После ключевого слова SET укажите одну или несколько комбинаций столбца и их новых значений. Столбцы, не указанные в предложении SET, будут иметь исходные значения.
- Предложение WHERE является необязательным и ограничивает операцию обновления, связанную с указанным условием. Если вы не укажете предложение WHERE, Postgres обновит все строки таблицы.
- Предложение RETURNING является необязательным и возвращает список всех обновленных строк или значений указанного столбца.
Давайте обновим данные в следующей таблице сотрудника
.
Обновление одной строки
Используйте предложение WHERE с оператором UPDATE и укажите значение первичного ключа для обновления одной строки в таблице.
Например, следующий оператор UPDATE обновит электронную почту сотрудника
, чей emp_id=1
.
ОБНОВЛЕНИЕ сотрудника SET электронная почта = '[электронная почта защищена]' ГДЕ emp_id = 1;
В приведенном выше примере UPDATE employee
указывает, что мы хотим обновить данные в таблице employee
, SET email = '[email protected]'
указывает, что столбец электронной почты должен быть обновлен до '[электронная почта защищена]'
. WHERE emp_id = 1
обновит строку, где значение emp_id
равно 1, тем самым ограничивая операцию обновления только одной строкой.
Следующее отображает результат вышеуказанного запроса в pgAdmin:
Оператор UPDATE возвращает UPDATE 1
, что указывает на то, что была обновлена 1 строка.
Давайте проверим обновленные данные, используя запрос SELECT, показанный ниже.
ПРЕДУПРЕЖДЕНИЕ: Если вы не укажете предложение WHERE
, оно обновит значение столбца электронной почты во всех строках.
ОБНОВЛЕНИЕ сотрудника SET email = '[электронная почта защищена]';
Пункт RETURNING с оператором UPDATE
Предложение RETURNING возвращает обновленные значения строк или столбцов. Если вы укажете RETURNING *
, то он вернет все обновленные строки, а если вы укажете RETURNING имя_столбца
, то он вернет значения указанных столбцов. Вы можете указать несколько столбцов, разделенных запятой.
Следующий оператор UPDATE возвращает все обновленные строки:
ОБНОВЛЕНИЕ сотрудника УСТАНОВИТЬ дату рождения = NULL, оклад = 10000, last_name = 'Блэмайр' ГДЕ emp_id = 4 ВОЗВРАЩЕНИЕ *;
Как видите, дата рождения
установлена в NULL, зарплата
установлена в 10000, а last_name
изменена на "Blamire"
, где emp_id = 4
.
Порядок столбцов не важен для предложения SET. Ниже показан результат вышеуказанного запроса в pgAdmin:
Предложение RETURNING может использоваться с одним или несколькими столбцами. Следующий оператор UPDATE возвращает несколько столбцов:
ОБНОВЛЕНИЕ сотрудника SET last_name = 'Блэмайр', дата рождения = NULL, зарплата = 10000 ГДЕ emp_id = 4 ВОЗВРАЩАЕМ имя, фамилию, зарплату;
Предложение RETURNING может использовать любые столбцы таблицы, не обязательно столбец, используемый в предложении SET, например. столбец first_name
не был обновлен, но мы все еще можем использовать его с предложением RETURNING.
Приведенный выше запрос отобразит следующий результат в pgAdmin:
Обновление Присоединиться
PostgreSQL поддерживает обновление данных в одной таблице на основе значений в другой таблице с помощью предложения объединения UPDATE.
ОБНОВЛЕНИЕ <таблица_1> НАБОР <столбец1> = <значение1> ИЗ <таблица_2> ГДЕ;
В приведенном выше синтаксисе, чтобы присоединиться к другой таблице в операторе UPDATE, укажите предложение FROM со второй таблицей и укажите условия соединения в предложении WHERE. Предложение FROM должно стоять сразу после предложения SET.
Для каждой строки для table_1
оператор UPDATE объединяет строки table_2
. Для всех совпадающих строк оператор UPDATE обновляет значение column1
новым значением, указанным в
.
Учтите, что у нас есть отдел (родительская таблица) и сотрудник (дочерняя таблица), как показано ниже.
Теперь мы хотим увеличить заработную плату всех сотрудников отдела IT
с dept_name
как «IT» до 10% от их существующей зарплаты, мы можем сделать это, следуя оператору соединения UPDATE.
ОБНОВЛЕНИЕ Сотрудник emp УСТАНОВИТЬ ЗАРПЛАТУ = ЗАРПЛАТА + (ЗАРПЛАТА * 0,10) ОТ Отдела отдела ГДЕ emp.dept_id = dept.dept_id И dept.dept_name = 'ИТ';
Когда приведенный выше оператор UPDATE выполняется, он показывает обновленные 2 строки. Для каждой строки таблицы «Сотрудник» она соединяется с таблицей «Отдел», используя dept_id
в качестве соответствующего столбца и названия отдела как IT
и увеличивает зарплату этих сотрудников на 10%.
Давайте выберем данные из таблицы Сотрудник
и проверим, как обновляется зарплата. Обратите внимание, что есть два сотрудника с emp_id
как 3 и 6, принадлежащие IT-отделу
с dept_id
как 2.
Обновление PostgreSQL — javatpoint
следующий → ← предыдущая В этом руководстве мы изучим команду PostgreSQL UPDATE для обновления текущих данных в таблице. В PostgreSQL команда UPDATE используется для изменения существующих записей в таблице . Чтобы обновить выбранные строки, мы должны использовать предложение WHERE; в противном случае все строки будут обновлены. Синтаксис команды обновленияСинтаксис команды обновления следующий: ОБНОВЛЕНИЕ имя_таблицы УСТАНОВИТЬ столбец1 = значение1, столбец2 = значение2…., столбецN = значениеN ГДЕ состояние; У нас есть следующие параметры, которые используются в приведенном выше синтаксисе:
Примеры команды обновления PostgreSQLДля лучшего понимания мы рассмотрим примеры команды обновления PostgreSQL . Возьмем таблицу отдела , которую мы создали в секции команд Insert . Во-первых, мы увидим структуру таблицы отдела с помощью следующей команды: ВЫБЕРИТЕ * ОТ отдела; После выполнения команды select мы получим следующий результат: Пример таблицы ОБНОВЛЕНИЯ PostgreSQLЗдесь мы изменим значения NULL столбца last_update на Текущая дата с помощью следующей команды: ОБНОВЛЕНИЕ отдела УСТАНОВИТЬ last_update = ПО УМОЛЧАНИЮ ГДЕ last_update имеет значение NULL; Мы получим следующий результат после выполнения вышеуказанной команды: В приведенном выше запросе мы применяем ключевое слово DEFAULT к столбцу last_update , который принимает текущую дату в соответствии со значением по умолчанию. И предложение WHERE обновляет только те строки, где значение столбца last_update равно NULL . Пример обновления всех строк в таблице с помощью команды «Обновить»Чтобы обновить значения в столбец местоположения как США для всех строк в таблице отдела мы используем следующую команду: Примечание. В приведенной ниже команде обновления мы игнорируем предложение WHERE:ОБНОВЛЕНИЕ отдела УСТАНОВИТЕ местоположение = ‘США’; После выполнения вышеуказанного запроса он обновит столбец местоположения в таблице отделов : Мы будем использовать команду выбора для проверки вывода вышеуказанной команды в стол отдела: выбрать* из отдела; И в той же таблице мы можем также обновить данные столбца из дополнительного столбца. Приведенная ниже команда используется для копирования значений столбца имя_отдела в столбец описания таблицы отдела : ОБНОВЛЕНИЕ отдела Описание SET = имя_отдела; Как только мы выполним указанный выше запрос, он обновит столбец описания в таблице отдела : После этого мы будем использовать команду выбора, чтобы увидеть обновленный столбец (описание) в таблице отдела : Пример команды обновления PostgreSQLЗдесь мы возьмем таблицу отдела_tmp , которая имеет ту же структуру, что и таблица отдела : Следующая команда используется для обновления значений, поступающих из таблицы отделов для столбцов в таблице Department_tmp : ОБНОВЛЕНИЕ УСТАНОВИТЬ местоположение = отдел. местоположение, описание = отдел.описание, last_update = отдел.last_update ОТ отделение ГДЕ Department_tmp.Dept_id = Department.Dept_id; Как только мы выполним вышеуказанный запрос, он обновит таблицу Department_TMP: Для проверки таблицы Department_tmp мы будем использовать Выберите команду : ВЫБЕРИТЕ * ИЗ отдела_tmp; И мы получим следующий вывод: Примечание. В приведенной выше команде обновления мы использовали предложение FROM для описания второй таблицы (отдела), которая содержится в обновлении.Здесь мы использовали условие соединения в предложении WHERE . И иногда эта команда UPDATE упоминается как UPDATE INNER JOIN или UPDATE JOIN , так как две или более таблиц участвуют в UPDATE 9.Команда 0151. Команда обновления через возвращаемое условиеПо умолчанию команда обновления может возвращать количество затронутых строк, а также возвращает эффективные данные с помощью секции Returning . |