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 (в квадратные
скобки взяты те параметры/инструкции/разделы, которые
являются необязательными):
- добавляет строки, полученные запросом 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), как у новой записи, то
старая запись удаляется перед добавлением новой.
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
3370 Прочтений • [SQL - изменения данных в таблицах (INSERT, REPLACE, UPDATE, DELETE) (perl sql mysql)] [08.05.2012] [Комментариев: 0]