Виктор Гольцман - MySQL 5.0. Библиотека программиста
Примечание
При обновлении значения первичного ключа в родительской таблице выполняются проверки целостности данных (см. описание параметров внешнего ключа в пункте «Ключевые столбцы и индексы»).
Следующая команда, которую мы рассмотрим, – это команда REPLACE, осуществляющая либо добавление, либо замещение строк таблицы. Она имеет те же параметры, что и команда INSERT (см. подраздел «Вставка отдельных строк»):
REPLACE [INTO] <Имя таблицы>
[(<Список столбцов>)]
VALUES
(<Список значений 1>),
(<Список значений 2>),
…
(<Список значений N>);Если в строке, вставляемой в таблицу с помощью команды REPLACE, значение первичного ключа или уникального индекса не совпадает ни с одним из уже существующих значений, то эта команда работает так же, как команда INSERT (если в таблице нет ни первичного ключа, ни уникального индекса, то команда REPLACE всегда работает как команда INSERT). Если же в таблице есть строка с таким же значением первичного ключа или уникального индекса, то перед добавлением новой строки прежняя строка удаляется. Например, выполнив команду
REPLACE INTO Products
VALUES
(3,'Соковыжималка Мосбытприбор СШ-800',
'Цвет: кремовый. Мощность: 350 Вт',1299.99);мы тем самым заменим в таблице Products (Товары) прежнюю строку с идентификатором 3, содержавшую информацию о кофеварке (см. листинг 2.5 выше), новой строкой, также имеющей идентификатор 3, но содержащей информацию о соковыжималке.
Отмечу, что в команде REPLACE, в отличие от команды UPDATE, нельзя задавать новые значения с помощью выражений, вычисляемых с использованием прежних значений, хранившихся в строке. Если вы укажете в команде REPLACE такое выражение, то вместо прежнего значения будет подставлено значение данного столбца по умолчанию.
И, наконец, последняя команда, которую мы рассмотрим, – команда удаления строк таблицы:DELETE FROM <Имя таблицы>
[WHERE <Условие отбора>]
[ORDER BY <Имя столбца> [ASC или DESC]]
[LIMIT <Количество строк>];Например, информацию о клиенте по фамилии Петров вы можете удалить из таблицы Customers с помощью команды
DELETE FROM Customers WHERE id = 534;
Параметры команды DELETE аналогичны соответствующим параметрам команды UPDATE. В результате выполнения этой команды будут удалены строки таблицы, удовлетворяющие условию отбора, а если условие отбора не задано, – все строки таблицы. При этом с помощью параметра LIMIT можно указать предельное количество удаляемых строк, а с помощью параметра ORDER BY – последовательность удаления строк.
...Примечание
При удалении строк родительской таблицы выполняются проверки целостности связи (см. описание параметров внешнего ключа в пункте «Ключевые столбцы и индексы»).
Итак, мы освоили операции изменения и удаления строк таблицы: команды UPDATE (обновление), REPLACE (замещение) и DELETE (удаление). Подведем итоги второй главы.
2.7. Резюме
Из этой главы вы получили всю необходимую информацию для построения собственной базы данных, научились создавать, изменять и удалять базы данных и таблицы, настраивать ключевые столбцы и индексы, а также познакомились с типами данных, используемыми в MySQL. Вы научились работать с данными: добавлять строки в таблицу, изменять и удалять их. Кроме того, вы научились находить в базе данных нужную вам информацию с помощью запросов.
Следующая глава расширит ваши возможности по поиску и обработке данных. В ней будут рассмотрены функции и операторы, с помощью которых вы сможете создавать более сложные и мощные запросы.
Глава 3 Операторы и функции языка SQL
В этой главе вы познакомитесь с функциями и операторами, с помощью которых можно создавать выражения – формулы, вычисляющие какое-либо значение (числовое, логическое, символьное и др.). Наиболее часто выражения используются в SQL-запросах: как для вычисления значений, выводимых запросом, так и в условиях отбора. С помощью выражений можно также задавать условия отбора в SQL-командах UPDATE и DELETE, значения, добавляемые в таблицу, в командах INSERT и UPDATE и многое другое.
Отличие операторов от функций заключается, по существу, только в форме записи. Аргументы функции записываются после имени функции в скобках через запятую, в то время как аргументы оператора (операнды) могут располагаться по обе стороны от значка или имени оператора. Поэтому, рассматривая операторы и функции, мы будем подразделять их на группы, руководствуясь их назначением, а не внешними различиями.
В первую очередь мы рассмотрим наиболее часто используемую группу операторов – операторы, осуществляющие проверку какого-либо условия.
3.1. Операторы и функции проверки условий
В этом разделе вы узнаете об операторах, которые предназначены для создания условий отбора, а именно: об операторах, выполняющих сравнение двух или нескольких величин, и о логических операторах, позволяющих создавать комбинированные условия.
Кроме того, мы разберем функции и операторы, возвращающие один из своих аргументов, выбранный согласно некоторому критерию.
Вначале мы рассмотрим операторы сравнения.
Операторы сравнения
Операторы сравнения позволяют сравнивать между собой значения столбцов таблиц, значения выражений и константы, относящиеся к любым типам данных. Результатом сравнения является логическое значение:
• 1 (TRUE) – истинное значение, которое свидетельствует о том, что сравнение верно, условие выполнено;
• 0 (FALSE) – ложное значение, которое свидетельствует о том, что сравнение неверно, условие не выполнено;
• NULL – неопределенное значение, которое свидетельствует о том, что проверить условие невозможно, поскольку один из операндов равен NULL.
...Примечание
Иногда проверить условие можно несмотря на то, что один из операндов равен NULL (см., например, описание операторов BETWEEN и IN в этом подразделе); в этом случае возвращается значение 1 или 0.
Начнем с рассмотрения оператора, проверяющего равенство двух операндов.
Оператор x = y
Оператор «равно» возвращает следующие значения:
• 1 (TRUE) – если х и y совпадают;
• 0 (FALSE) – если х и y различны;
• NULL – если по крайней мере один из операндов равен NULL.
Например, выберите из таблицы Customers (Клиенты) строки, в которых значение в столбце name равно «Крылов»:
SELECT * FROM Customers WHERE name = 'КРЫЛОВ
Результат этого запроса представлен в табл. 3.1. Таблица 3.1. Результат выполнения запроса
Как вы видите, при сравнении строк с помощью этого оператора регистр символов не учитывается.
Следующий оператор также проверяет равенство двух операндов.
Оператор x < = > уВ случае, когда оба операнда не равны NULL, данный оператор аналогичен оператору «равно». Если один из операндов равен NULL, оператор < = > возвращает значение 0 (FALSE), а если оба операнда равны NULL – значение 1 (TRUE).
Например, запросSELECT 100 = NULL, 100< = >NULL, NULL = NULL, NULL< = >NULL;
возвращает результат (табл. 3.2) и наглядно иллюстрирует различие между операторами = и < = >. Таблица 3.2. Результат выполнения запроса
Следующие операторы проверяют равенство операнда какому-либо логическому значению.
Оператор x IS y, где y – TRUE, FALSE, UNKNOWN или NULLВыражением IS TRUE возвращает 1 (TRUE), если x – отличное от нулячисло или отличная от нулевой («0000-00-00 00:00:00») дата и/или время, и 0 (FALSE) – в остальных случаях.
Выражением IS FALSE возвращает 1 (TRUE), еслихравен нулю либо нулевой дате и/или времени, и 0 (FALSE) – в остальных случаях....Примечание
Если x является символьной строкой, то перед сравнением с TRUE или FALSE эта строка преобразуется в число. Для этого отбрасываются все символы, начиная с первого, недопустимого в числовом значении, а начальная подстрока рассматривается как число. Если первый символ в значении – буква или пустая строка («»), то x приравнивается к нулю.
Выражениях IS UNKNOWN их IS NULL возвращают 1 (TRUE), еслихравен NULL, и 0 (FALSE) – в остальных случаях.
Например, запрос
SELECT 100 IS TRUE, 0 IS TRUE, '2007-12-12' IS TRUE, '0000-00-00' IS TRUE, NULL IS TRUE;
возвращает результат, представленный в табл. 3.3. Таблица 3.3. Результат выполнения запроса
ЗапросSELECT 100 IS FALSE, 0 IS FALSE, '2007-12-12' IS FALSE, '0000-00-00' IS FALSE, NULL IS FALSE;
возвращает результат, представленный в табл. 3.4. Таблица 3.4. Результат выполнения запроса
ЗапросSELECT 100 IS NULL, 0 IS NULL, '2007-12-12' IS NULL, '0000-00-00' IS NULL, NULL IS NULL;
возвращает результат, представленный в табл. 3.5. Таблица 3.5. Результат выполнения запроса