The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

SQL - изменения данных в таблицах (INSERT, REPLACE, UPDATE, DELETE) (perl sql mysql)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: perl, sql, mysql,  (найти похожие документы)
Date: Fri, 29 Sep 2000 10:56:51 +0400 (MSD) From: MailList: Perl в примерах Subject: SQL - изменения данных в таблицах (INSERT, REPLACE, UPDATE, DELETE) ----------------------------------------------------------- PERL В ПРИМЕРАХ http://properl.com N 10 (28.09.2000) ----------------------------------------------------------- Запросы для изменения данных в таблицах Сегодня мы рассмотрим команды MySQL, позволяющие изменять данные в таблицах. Команда INSERT Команда INSERT добавляет записи в существующую таблицу. Существует три варианта синтаксиса INSERT (в квадратные скобки взяты те параметры/инструкции/разделы, которые являются необязательными): INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(название_поля,...)] VALUES (выражение,...),(...),... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы SET название_поля=выражение, название_поля=выражение, ... - добавляет в таблицу новую строку с указанными значениями полей; INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(название_поля,...)] SELECT ... - добавляет строки, полученные запросом SELECT из других таблиц. Если вы не указываете список полей в командах вида INSERT ... VALUES или INSERT ... SELECT, то в списке VALUES () должны быть значения для всех полей таблицы. Если вы не знаете порядок полей в таблицы, используйте команду DESCRIBE имя_таблицы чтобы узнать его. Всем полям, для которых значения не указаны явно, присваиваются их значения по умолчанию. Например, вы указали в списке полей не все поля таблицы. Тогда полям, не указанным в списке, будут присвоены их значения по умолчанию. В выражении могут быть использованы значения полей, определенные раньше. Например, вы можете написать так: mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); Но такая команда будет неправильной: mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15); Для того, чтобы задержать выполнение команды пока другие клиенты читают таблицу, используйте LOW_PRIORITY. В этом случае клиент должен будет ожидать до завершения выполнения команды INSERT. Опция DELAYED в выражении INSERT является специфической для MySQL и полезна если у вас есть клиенты, которые не могут ждать завершения выполнения INSERT. Она применяется, например, когда вы используете MySQL для протоколирования и часто выполняете запросы SELECT, которые тебуют значительного времени для завершения. Когда вы используете INSERT DELAYED, клиент получает разрешение без задержки, а строки будут вставлены когда таблица не будет использоваться другими процессами. Если вы используете IGNORE в команде INSERT, строки, значения PRIMARY или UNIQUE полей в которых повторяют существующие в таблице, игнорируются и не добавляются в таблицу. Если же вы не укажете IGNORE, выполнение команды прекращается когда попадается строка, значение ключевого поля в которой повторяет существующее значение. Для команд INSERT INTO ... SELECT существуют следующие ограничения: Запрос SELECT не может содержать выражение ORDER BY. Таблица, в которую добавляется строка не может использоваться в выражении FROM части SELECT (т.к. SELECT в результате такого использования может найти записи, вставленные ранее при выполнении того же самого запроса INSERT, что может привести к непредсказуемым результатам). Команда REPLACE Команда REPLACE отличается от INSERT только тем, что если в таблице имеется запись с таким же значением в индексированном поле (unique index), как у новой записи, то старая запись удаляется перед добавлением новой. Синтаксис команды: REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(название_поля,...)] VALUES (выражение,...),(...),... или REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы SET название_поля=выражение, название_поля=выражение, ... или REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(название_поля,...)] SELECT ... Команда UPDATE UPDATE [LOW_PRIORITY] имя_таблицы SET название_поля1=выражение1,название_поля2=выражение2,... [WHERE условное_выражение] [LIMIT количество_записей] Команда UPDATE заменяет значения существующих полей таблицы на новые. Выражение SET указывает какие поля изменять и значения, которые нужно присвоить этим полям. Выражение WHERE (если есть) - какие записи должны быть изменены. Если WHERE нет, будут изменены все записи. Если вы указываете LOW_PRIORITY, выполнение UPDATE задерживается пока другие клиенты читают таблицу. При модификации поля можно использовать его текущее значение. Например такой запрос увеличивает значение поля age на 1: mysql> UPDATE persondata SET age=age+1; UPDATE вычисляет выражения с лева на право. Например, следующий запрос удваивает возраст (поле age), а потом увеличивает его на 1: mysql> UPDATE persondata SET age=age*2, age=age+1; UPDATE возвращает количество полей, которые были изменены. Используйте LIMIT, чтобы изменить заданное количество записей. Команда DELETE DELETE [LOW_PRIORITY] FROM имя_таблицы [WHERE условное_выражение] [LIMIT количество_записей] DELETE удаляет из таблицы записи, которые удовлетворяют условию WHERE, и возвращает количество удаленных записей. Если вы не используете выражение WHERE, все поля будут удалены. При этом DELETE возвращает 0 (MySQL не может показать сколько полей было удалено, т.к. для экономии времени создается новая таблица без записей вместо того чтобы удалять все записи из старой таблицы). Если вы хотите знать сколько полей было удалено когда удаляете все поля из таблицы, используйте такую команду: mysql> DELETE FROM имя_таблицы WHERE 1>0; Если вы указываете LOW_PRIORITY, выполнение DELETE задерживается пока другие клиенты читают таблицу. Специфическая для MySQL опция LIMIT указывает серверу максимальное количество записей, которые должны быть удалены. ----------------------------------------------------------- Нашему журналу нужны люди, хорошо разбирающиеся в Perl и способные писать статьи. Подробности по e-mail: alex@sim.panda.net.ua (пришлите информацию о себе). ----------------------------------------------------------- В нашем форуме "Работа для программистов и Web дизайнеров" (http://properl.com/cgi-bin/forum/job.pl) Вы можете разместить свои резюме, предложения о сотрудничестве, информацию о вакансиях для программистов и Web дизайнеров. ----------------------------------------------------------- (c) Perl в примерах 2000

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру