Смекни!
smekni.com

Методические указания рассмотрены и рекомендованы к изданию методическим семинаром кафедры автоматики и компьютерных систем «29» (стр. 15 из 16)

Если указывается ключевое слово LOW_PRIORITY, то выполнение данной команды UPDATE задерживается до тех пор, пока другие клиенты не завершат чтение этой таблицы.

Если указывается ключевое слово IGNORE, то команда обновления не будет прервана, даже если при обновлении возникнет ошибка дублирования ключей. Строки, из-за которых возникают конфликтные ситуации, обновлены не будут.

Если доступ к столбцу из указанного выражения осуществляется по аргументу tbl_name, то команда UPDATE использует для этого столбца его текущее значение. Например, следующая команда устанавливает столбец age в значение, на единицу большее его текущей величины:

mysql> UPDATE persondata SET age=age+1;

Значения команда UPDATE присваивает слева направо. Например, следующая команда дублирует столбец age, затем инкрементирует его:

mysql> UPDATE persondata SET age=age*2, age=age+1;

Если столбец устанавливается в его текущее значение, то MySQL замечает это и не обновляет его.

Команда UPDATE возвращает количество фактически измененных строк. В версии MySQL 3.22 и более поздних функция C API mysql_info() возвращает количество строк, которые были найдены и обновлены, и количество предупреждений, имевших место при выполнении UPDATE.

Синтаксис оператора DELETE

DELETE [LOW_PRIORITY | QUICK] FROM table_name

[WHERE where_definition]

[ORDER BY ...]

[LIMIT rows]

или

DELETE [LOW_PRIORITY | QUICK] table_name[.*] [,table_name[.*] ...]

FROM table-references

[WHERE where_definition]

или

DELETE [LOW_PRIORITY | QUICK]

FROM table_name[.*], [table_name[.*] ...]

USING table-references

[WHERE where_definition]

Оператор DELETE удаляет из таблицы table_name строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.

Если оператор DELETE запускается без определения WHERE, то удаляются все строки. При работе в режиме AUTOCOMMIT это будет аналогично использованию оператора TRUNCATE. В MySQL 3.23 оператор DELETE без определения WHERE возвратит ноль как число удаленных записей.

Если действительно необходимо знать число удаленных записей при удалении всех строк и если допустимы потери в скорости, то можно использовать команду DELETE в следующей форме:

mysql> DELETE FROM table_name WHERE 1>0;

Следует учитывать, что эта форма работает намного медленнее, чем DELETE FROM table_name без выражения WHERE, поскольку строки удаляются поочередно по одной.

Если указано ключевое слово LOW_PRIORITY, выполнение данной команды DELETE будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы.

Если задан параметр QUICK, то обработчик таблицы при выполнении удаления не будет объединять индексы - в некоторых случаях это может ускорить данную операцию.

Символы .* после имен таблиц требуются только для совместимости с Access:

DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

или

DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

В предыдущем случае просто удалены совпадающие строки из таблиц t1 и t2.

Выражение ORDER BY и использование нескольких таблиц в команде DELETE поддерживается в MySQL 4.0.

Если применяется выражение ORDER BY, то строки будут удалены в указанном порядке. В действительности это выражение полезно только в сочетании с LIMIT. Например:

DELETE FROM somelog

WHERE user = 'jcole'

ORDER BY timestamp

LIMIT 1

Данный оператор удалит самую старую запись (по timestamp), в которой строка соответствует указанной в выражении WHERE.

Специфическая для MySQL опция LIMIT для команды DELETE указывает серверу максимальное количество строк, которые следует удалить до возврата управления клиенту. Эта опция может использоваться для гарантии того, что данная команда DELETE не потребует слишком много времени для выполнения. Можно просто повторять команду DELETE до тех пор, пока количество удаленных строк меньше, чем величина LIMIT.

Синтаксис оператора SELECT

Оператор SELECT имеет следующую структуру:

SELECT [STRAIGHT_JOIN]

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]

[DISTINCT | DISTINCTROW | ALL]

select_expression,...

[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

[FROM table_references

[WHERE where_definition]

[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[HAVING where_definition]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[LIMIT [offset,] rows]

[PROCEDURE procedure_name]

[FOR UPDATE | LOCK IN SHARE MODE]]

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

select_expression может содержать следующие функции и операторы:

+ - * / Арифметические действия
% Остаток от деления (как в C)
| & Битовые функции (используется 48 бит)
- С Мена знака числа
( ) Скобки
BETWEEN(A, B, C) (A >= B) AND (A <= C)
BIT_COUNT() Количество бит
ELT(N, a, b, c, d) Возвращает a, если N == 1, b, если N == 2 и т. д. a, b, c, d - строки. ПРИМЕР: ELT(3, "First", "Second", "Third", "Fourth")
вернет "Third"
FIELD(Z, a, b, c) Возвращает a, если Z == a; b, если Z == b и т. д., где a, b, c, d строки ПРИМЕР: FIELD("Second", "First", "Second", "Third", "Fourth")
вернет "Second"
IF(A, B, C) Если A истина (!= 0 and != NULL), то вернет B, иначе вернет C
IFNULL(A, B) Если A не null, вернет A, иначе вернет B
ISNULL(A) Вернет 1, если A == NULL, иначе вернет 0. Эквивалент ('A == NULL')
NOT ! NOT, вернет TRUE (1) или FALSE (0)
OR, AND Вернет TRUE (1) или FALSE (0)
SIGN() Вернет -1, 0 или 1 (знак аргумента)
SUM() Сумма столбца
= <> <= < >= > Вернет TRUE (1) или FALSE (0)
expr LIKE expr Вернет TRUE (1) или FALSE (0)
expr NOT LIKE expr Вернет TRUE (1) или FALSE (0)
expr REGEXP expr Проверяет строку на соответствие регулярному выражению expr
expr NOT REGEXP expr Проверяет строку на соответствие регулярному выражению expr

select_expression может также содержать один или большее количество следующих математических функций:

ABS() Абсолютное значение (модуль числа)
CEILING() ()
EXP() Экспонента
FORMAT(nr, NUM) Форматирует число в формат '#, ###, ###.##' с NUM десятичных цифр
LOG() Логарифм
LOG10() Логарифм по основанию 10
MIN(), MAX() Минимум или максимум соответственно. Должна иметь при вызове два или более аргумента, иначе рассматривается как групповая функция
MOD() Остаток от деления (аналог %)
POW() Степень
ROUND() Округление до ближайшего целого числа
RAND([integer_expr]) Случайное число типа float, 0 <= x <= 1.0, используется integer_expr как значение для запуска генератора
SQRT() Квадратный корень

select_expression может также содержать одну или больше следующих строковых функций.

CONCAT() Объединение строк
INTERVAL(A, a, b, c, d) Возвращает 1, если A == a; 2, если A == b... Если совпадений нет, вернет 0. A, a, b, c, d - строки.
INSERT(org, strt, len, new) Заменяет подстроку org[strt...len(gth)] на new. Первая позиция строки=1
LCASE(A) Приводит A к нижнему регистру
LEFT() Возвращает строку символов, отсчитывая слева
LENGTH() Длина строки
LOCATE(A, B) Позиция подстроки B в строке A
LOCATE(A, B, C) Позиция подстроки B в строке A, начиная с позиции C
LTRIM(str) Удаляет все начальные пробелы из строки str
REPLACE(A, B, C) Заменяет все подстроки B в строке A на подстроку C
RIGHT() Получение подстроки справа
RTRIM(str) Удаляет хвостовые пробелы из строки str
STRCMP() Возвращает 0, если строки одинаковые
SUBSTRING(A, B, C) Возвращает подстроку из A, с позиции B до позиции C
UCASE(A) Переводит A в верхний регистр

И наконец несколько просто полезных функций, которые тоже можно применить в select_expression.

CURDATE() Текущая дата
DATABASE() Имя текущей базы данных из которой выполняется выбор
FROM_DAYS() Меняет день на DATE
NOW() Текущее время в форматах YYYYMMDDHHMMSS или "YYYY-MM-DD HH:MM:SS". Формат зависит от того в каком контексте используется NOW(): числовом или строковом
PASSWORD() Шифрует строку
PERIOD_ADD(P:N) Добавить N месяцев к периоду P (в формате YYMM)
PERIOD_DIFF(A, B) Возвращает месяцы между A и B. Обратите внимание, что PERIOD_DIFF работает только с датами в форме YYMM или YYYMM
TO_DAYS() Меняет DATE (YYMMDD) на номер дня
UNIX_TIMESTAMP([date]) Возвращает метку времени unix, если вызвана без date (секунды, начиная с GMT 1970.01.01 00:00:00). При вызове со столбцом TIMESTAMP вернет TIMESTAMP. date может быть также строкой DATE, DATETIME или числом в формате YYMMDD (или YYYMMDD)
USER() Возвращает логин текущего пользователя
WEEKDAY() Возвращает день недели (0 = понедельник, 1 = вторник, ...)

Групповые функции в операторе select

Следующие функции могут быть использованы в предложении GROUP:

AVG() Среднее для группы GROUP
SUM() Сумма элементов GROUP
COUNT() Число элементов в GROUP
MIN() Минимальный элемент в GROUP
MAX() Максимальный элемент в GROUP

Учебное издание

ПОНОМАРЕВ Алексей Анатольевич

Часть 1

СОЗДАНИЕ СТРУКТУРЫ БД И МАНИПУЛИРОВАНИЕ ДАННЫМИ В СУБД MYSQL

Методические указания к выполнению лабораторных работ

по курсу «Базы данных» для студентов III курса специальностей 230105 «Программное обеспечение вычислительной техники и автоматизированных систем». 230201 «Информационные системы и технологии».