Книги, научные публикации Pages:     | 1 |   ...   | 6 | 7 | 8 | 9 | 10 |   ...   | 11 |

мтт. ...

-- [ Страница 8 ] --

LOCATE (substr, str,pos). Форма функции LOCATE () с двумя аргументами возвращает индекс позиции первого появления подстроки substr в строке srr. Если строка substr не встречается в str, эта функция возвращает значение 0. Если хотя бы один из аргументов функции имеет значение NULL, функция также возвращает NULL. При определении аргумента позиции pos функция LOCATE () начинает искать строку substr на заданном месте. Регистр символов при сравнении учитывается. LOCATE("b","abc") <*2 LOCATE("b","ABC") OQ LOWER ( s t r }. Эта функция является аналогом функции LCASE (). LPAD (str, len,pad_str). Возвращает подстроку строки str, дополненную слева до указанной длины len (символов) строкой \eft_pad. Возвращает только строку str, если ее длина уже составляет len символов. LPADC'abc", 12, "def") LPAD ("abc", 10, ". ") LPADC'abc",2,".") ^"defdefdef abc" Х=>" abc" O"abc" Х Х Функция LPAD () впервые появилась в MySQL 3.22.2. Х LTRlM(s//-). Возвращает подстроку строки str, удаляя все стоящие впереди ее пробелы, или значение NULL, если строка str имеет значение NULL. LTRIM(" abc ") с*" abc " Х MAKE_SET (n,bitOjstr, bitl_str,...). Создает значение типа SET (строку, состоящую из разделенных запятыми подстрок), основываясь на значении целого числа п и строк bitO_str, bitl_str,.... Для каждого разряда установленного в двоичной записи значения и, в результат включается соответствующая строка. (Если установлен нулевой разряд, возвращаемый результат включает строку bitO_str и т.п.) Если аргумент и равен нулю, результатом является пустая строка. Если аргумент п имеет значение NULL, возвращаемый результат также имеет значение NULL. Все строки списка, Приложение В. Операторы и функции имеющие значение NULL, при создании результирующей строки игнорируются. MAKE_SET(8,"a","b","c","d","e") => "d" M A K E _ S E T ( 7, " a ", " b ", " с ", "d", "e") "=> "a,b,c" MAKE_SET(2-t-16, "a", "b", "с", "d", "e") => "b,e" MAKE_SET(2 I 16, "a", "b", "c", "d", " e " ) Х=> "b,e" MAKE_SET(-1, "a", "b", "c", "d", " e " ) => " a, b, c, d, e " Результат последнего примера включает все заданные строки, поскольку в двоичной записи числа -1 все разряды установлены. Функция MAKE_SET () впервые появилась в MySQL 3.22.2. MlD(str,pos, /en). Возвращает подстроку строки str, которая начинается с позиции pos и имеет длину 1еп символов. Возвращает NULL, если хотя бы один из аргументов имеет значение NULL. M I D ( " w h a t a dull example", 8, 4) => "dull" О С Т ( и ). Возвращает значение и, записанное в виде строки в восьмеричной форме. В этой связи два следующих выражения эквивалентны: ост(я) и CONV(/J, 10, 8) Более детально о преобразовании рассказывается в описании ФУНКЦИИ C O N V ( ). Функция ост () впервые появилась в MySQL 3.22.4. OCTET_LENGTH (str). Эта функция является аналогом функции LENGTH(). POSITION (substr IN str) POSITION)). Эта функция подобна функции LOCATE () с двумя аргументами. Соответственно, два следующих выражения эквивалентны: POSITION (substr IN str) и LOCATE, (SUbstr, Str) REPEAT (str, п). Возвращает строку, состоящую из строки str, повторенной п раз. Возвращает пустую строку, если аргумент п имеет отрицательное значение. Если хотя бы один из аргументов имеет значение NULL, функция также возвращает значение NULL. REPEAT("х",10) "* "хххххххххх" REPEAT("abc",3) => "abcabcabc" Функция REPEAT () впервые появилась в MySQL 3.21.10. REPLACE (str,from_str, to_str). Возвращает строку str, в которой все экземпляры подстроки from_str заменены строкой to_str. Возвращает значение NULL, если хотя бы один из аргументов имеет значе Часть IV. Приложения ние NULL. Если аргумент to_str является пустой строкой, все имеющиеся подстроки from_str просто удаляются. Если аргумент from_str представляет собой пустую строку, функция RE PLACE () возвращает строку str без изменений. REPLACE ("abracadabra", "a", "oh") Х=> "ohbrohcohdohbroh" REPLACE("abracadabra", "a", "") ^ "brcdbr" REPLACE ("abracadabra", "", "x") Х Х=> "abracadabra" REVERSE (str). Возвращает строку, состоящую из строки str с записанными наоборот символами, либо значение NOLL, если аргумент str равен NULL. REVERSE("abracadabra") REVERSE("Madam, I m A d a m " ) Х => "arbadacarba" => "madA ml,madaM" Функция REVERSE () впервые появилась в MySQL 3.21.19. RIGHT (str, len). Возвращает len правых крайних символов строки str или всю строку, если она короче len. Возвращает значение NULL, если аргумент str равен NULL. Возвращает пустую строку, если значение аргумента len равно NULL или меньше 1. RIGHT("rightmost", 4) О "most" RPAD (str, len,pad_str). Возвращает строку str, дополненную справа до заданной длины len (символов) строкой pad_str. Возвращает только строку str, если ее длина уже составляет len символов. RPAD("abc",12,"def") => "abcdefdefdef" RPAD("abc", 10, ". ") с* "abc " RPAD("abc",2, ". " ) Х* "abc" Функция RPAD () впервые появилась в MySQL 3.22.2. Х RTRIM Istr). Возвращает строку str, удалив пробелы в конце, или значение NULL, если строка str равна NULL. RTRIM(" Х abc ") ^" abc" SOUNDEX (str). Возвращает строку, отражающую произношение содержимого строки str. Небуквенные символы строки str пропускаются. Международные небуквенные символы, не входящие в диапазон букв от А до Z, обрабатываются как гласные. SOUNDEX ("Cow") =S> "COOO" SOUNDEX("Cowl") Ф "С400" SOUNDEX ("Howl") Х=> "H400" SOUNDEX ("Hello") Х <=> "H400" SPACE ( n ). Возвращает строку, состоящую из п пробелов, или пустой набор, если аргумент п имеет отрицательное значение. Если аргумент п равен NULL, функция также возвращает значение NULL. Х Приложение В. Операторы и функции SPACE (6) SPACE (0) SPACE (NULL) Х Х=> " => "" >=>NULL Функция SPACE () впервые появилась в MySQL 3.21.16. SUBSTRING (Str,pos);

SUBSTRING (Str,pos, len) ;

SUBSTRING (Str FROM pos)', SUBSTRING(Лг FROM pos FOR len}. Возвращает подстроку строки str, начинающуюся с позиции pos. Если задан аргумент len, возвращается подстрока длиной len символов. В остальных случаях возвращается вся правая крайняя часть строки str, начиная с позиции pos. SUBSTRING ("abcdef", 3) <=> "cdef" SUBSTRING ("abcdef", 3,2) Следующие выражения эквивалентны: SUBSTRING (str,pos, len) SUBSTRING (5/7- FROM pos FOR len) MID (str,pos, len) т 3UBSTRiNG_iNDEX(sfr, delim,n). Возвращает подстроку строки str. Если аргумент и имеет положительное значение, функция SUBSTRING_INDEX() находит л-е появление строки-разделителя delim и возвращает всю часть строки, расположенную слева от этого разделителя. Если аргумент я имеет отрицательное значение, функция SUBSTRING_INDEX () находит п-е появление строкиразделителя delim, считая с правого конца str, и возвращает всю часть строки, расположенную справа от разделителя. Если строка delim в строке str не найдена, функция возвращает всю строку str. Функция SUBSTRING_INDEX () возвращает значение NULL, если хотя бы один из аргументов равен NULL. SUBSTRING_INDEX("jar-jar", "]",-2) SUBSTRING_INDEX(USER{),"@",1) Х => "ar-jar" О "paul" =J> "cd" Функция SUBSTRING_INDEX() впервые появилась в MySQL 3.21.15. TRIM ([ [LEADING | TRAILING I BOTH] [trim_Str] FROM] Str). Возвращает строку str, удаляя расположенные в начале/конце экземпляры строки trim_str. Если задано ключевое слово LEADING, функция TRIM () удаляет расположенные в начале копии строки trim_str. Если задано ключевое слово TRAILING, функция TRIMO удаляет расположенные в конце копии строки trim_str. При определении ключевого слова BOTH функция TRIM () удаляет все копии строки trim_str, как в начале, так и в конце строки str. Если ни одно из следующих ключевых слов, не задано по умолчанию, устанавливается слово BOTH. Если строка trim_str не задана, функция TRIM () удаляет пробелы. Часть IV. Приложения T R I M ( " A " FROM "^^XYZ' 4 ' 4 ") TRIM (LEADING " A " FROM Х* Л Л Х У 2 Л Л ") TRIM(TRAILING " л " FROM " ^ ^ ^ X Y Z A A " ) TRIM (BOTH " A " FROM " A A A X y z ^ ^,, j "* " X Y Z " =0 " X Y Z A A " Х=> " ^ ^ ^ x Y Z " ^ " X Y z" TRIM (BOTH FROM " ABC ") Х=> "ABC" TRIM(" ABC ") Х* "ABC" Функция TRIM () впервые появилась в MySQL 3.21.12. UCASE (str). Функция возвращает строку str, записав все символы в верхнем регистре, или значение NULL, если строка str имеет значение NULL. UCASE("New York, N Y " ) О "NEW YORK, NY" UCASE(NULL) ONULL UPPER (str). Эта функция аналогична функции UCASE (). Функции даты и времени Функции даты и времени считывают аргументы различных типов. В общем, функция, ожидающая аргумент типа DATE, с таким же успехом считает аргумент типа DATETIME или TIMESTAMP, просто откинув временную часть значения т ADDDATE (date, INTERVAL expr interval). Эта функция аналогична ФУНКЦИИ DATE_ADD(). Х CURDATE (). Возвращает текущую дату в виде строки, записанной в формате "YYYY-MM-DD", или в виде числа, представленного в формате "YYYYMMDD". Выбор строкового или числового вида результата определяется контекстом, в котором задается функция. CURDATE() Х* "1999-08-10" CURDATE()+0 019990810 Допустимые значения даты и времени Ввод недопустимых значений даты и времени для функций даты и времени приводит к возврату непредсказуемых результатов Поэтому настоятельно рекомендуется внимательно вводить значения аргументов Х CURRENT_DATE. Эта функция является аналогом функции CURDATE (). Обратите внимание на отсутствие круглых скобок. ж CURRENT_TIME. Эта функция является аналогом функции CURTIME (). Обратите внимание на отсутствие круглых скобок. ш CURRENT_TIMESTAMP. Эта функция является аналогом функции NOW (). Обратите внимание на отсутствие круглых скобок.

Приложение В. Операторы и функции. CURTIMEO. Возвращает текущее время дня в виде строки, записанной в формате "hh'inm:ss", или в виде числа, представленного в формате "hhmmss". Выбор строкового или числового вида результата определяется контекстом, в котором задается функция. CURTIMEO Х=> "16:41:01" CURTIMEO+0 ^164101 Функция CURTIME () впервые появилась в MySQL 3.21.12. DATE_ADD (date, INTERVAL expr interval). Считывает значение даты или даты и времени date, прибавляет к этому значению заданный временной интервал и возвращает результат. Аргумент ехрг определяет добавляемое к date временное значение (или вычитает, если значение ехрг начинается с "-"), a interval определяет способ интерпретации интервала. Результат представляет собой значение типа DATE, если аргумент date является значением типа DATE и в расчете не применяются временные значения. Если подобные временные значения имеются, результатом является значение типа DATETIME. Если аргумент date имеет недопустимое значение даты, эта функция возвращает значение NULL. DATE_ADD("1999-12-01",INTERVAL 1 YEAR) DATE_ADD ("1999-12-01", INTERVAL 60 DAY) O"20QO-12-01" =>"2000-01-30" DATE_ADD("1999-12-01",INTERVAL -3 MONTH) ^"1999-09-01" DATE_ADD("1999-12-01 08:30:00",INTERVAL 12 HOUR) О "1999-12-01 20:30:00" В табл. В.2 представлены допустимые значения аргумента interval, их описания и формат, в котором следует определять значения для каждого типа интервала. Для определения ключевого слова INTERVAL и спецификаторов аргумента interval можно использовать как строчные, так и заглавные символы. Добавляемое к значению даты выражение виде числа или строки. Если это значение символы, его следует определять строкой. можно устанавливать по своему желанию, любой символ пунктуации. DATE_ADD("1999-12-01",INTERVAL "2:3" DATE_ADD("1999-12-01",INTERVAL "2-3" ехрг можно задавать в содержит нецифровые Разделитель символов используя, например, YEAR_MONTH) Х* "2002-03-01" YEAR_MONTH) <* "2002-03-01" Части значения ехрг соответствуют частям, определяемым спецификатором interval. Например, для типа HOUR_SECOND используется формат "hh:mm:ss". Заданное в виде строки "15:21" значение аргумента ехрг интерпретируется как "00:15:21", а не как "15:21:00".

Часть IV. Приложения DATE_ADD("1999-12-01 12:00:00",INTERVAL "15:21" HOUR_SECOND) Х=> "1999-12-01 12:15:21' Таблица В.2. Типы интервалов функции DATE_ADD () Тип SECOND MINUTE HOUR DAY Описание Секунды Минуты Часы Дни Формат значения ss mm hh DD MONTH YEAR MINUTE_SECOND HOUR_MINUTE HOUR_SECOND DAY_HOUR DAYJMINUTE DAY_SECOND YEAR MONTH Месяцы ГОДЫ Минуты и секунды Часы и минуты Часы, минуты и секунды Дни и часы Дни, часы и минуты Дни, часы, минуты и секунды Годы и месяцы MM YY "mm: ss" "hh:mm" "hh:mm:ss" "DD hh" "DD hh:mm" "DD hh:mm:ss" "YY-MM" Если аргумент interval представлен значением типа YEAR, MONTH или YEAR_MONTH и в результате день превышает число дней в результирующем месяце, в качестве значения дня выбирается максимальное число дней в этом месяце. DATE_ADD ("1999-12-01", INTERVAL 2 MONTH) <=>"2000-02-29" Функция DATE_ADD () впервые появилась в MySQL 3.22.4. DATE_FORMAT (date,format). Форматирует значение даты или даты и времени date в соответствии со строкой формата format и возвращает результирующую строку. Функцию DATE_FORMAT () можно использовать для переформатирования значений типа DATE или DATETIME из используемой в MySQL формы в любую другую. DATE_FORMAT("1999-12-01","%М %е % Y " ) => "December I, 1999" DATE_FORMAT("1999-12-01","The %D of % M " ) "=> "The 1st of December" В табл. В.З представлены допустимые спецификаторы, можно использовать в строке форматирования. которые Приложение В. Операторы и функции В MySQL 3.23.0 и более поздних версиях перед кодом формата необходимо устанавливать символ "%". В ранних версиях он допускается, но является необязательным. Символы, определенные в Х строке формата, но не представленные в таблице, переносятся в строку результата без изменений. Если используется спецификатор времени для значения типа DATE, временная часть значения обрабатывается как "00:00:00". DATE_FORMAT ("1999-12-01", " % i " ) <=> "00" Функция DATE_FORMAT () впервые появилась в MySQL 3.21.14. Таблица В.З. Описание задания формата DATE_FORMAT () Специфи- Описание кагор %S, %s %i %н %h, %i %k %1 %Т %г %р %w %а %d %е %D %w %] %и %и %м 618 Секунды, записанные двумя цифрами (00, 01 59) 23) 12) Минуты, записанные двумя цифрами (00, 01,..., 59) Часы, записанные двумя цифрами, 24-часовое время (01,02 Часы, записанные двумя цифрами, 12-часовое время (1, Часы, представленные с помощью чисел, 24-часовое время (0,1,..., 23) Часы, представленные с помощью чисел, 12-часовое время (1, 2,..., 12) Время в 24-часовом формате (hh:mm:ss) Время в 12-часовом формате (hh:mm:ss AM (до полудня) или hh:mm.ss PM (после полудня)) AM (утро) или РМ (вечер) Название дня недели (Sunday, Monday,..., Saturday) Название дня недели в сокращенной форме (Sun, Mon,..., Sat) День месяца, записанный с помощью двух цифр(00, 01,...,31) День месяца в числовой форме (1, 2 31) День месяца с английским суффиксом (1st, 2nd, 3rd,...) День недели в числовой форме (0=Воскресенье, 1=Понедельник,..., 6=Суббота) День года, представленный с помощью трех цифр (001, 002 Неделя (0, 1,..., 52), где понедельник Ч первый день недели Название месяца (January, February December) Часть IV. Приложения 366) Неделя (0,1,..., 52), где воскресенье считается первым днем недели Окончание табл. В.З Специфи- Описание кагор %Ь %m %с %Y %у 8. оо Х Название месяца в сокращенной форме (Jan, Feb,..., Dec) Месяц, записанный с помощью двух чисел (01, 02,..,, 12) Месяц в числовой форме (1, 2 12) Значение года, записанное в виде числа с четырьмя числами Значение года, записанное в виде числа с четырьмя числами Константа % DATE_SUB (date, INTERVAL expr interval). Рассчитывает значения даты аналогично функции DATE_ADD () с той лишь разницей, что значение ехрг вычитается из значения даты date. Более детально об этом рассказывается в описании функции DATE_ADD (). DATE_SUB("1999-12-01",INTERVAL 1 MONTH) ^"1999-11-01" DATE_SUB("1999-12-01",INTERVAL "13-2" YEAR_MONTH) ^"1986-10-01" DATE_SUB("1999-12-01 04:53:12",INTERVAL "13-2" MINUTE_SECOND) ^"1999-12-01 0 4 : 4 0 : 1 0 " DATE_SUB("1999-12-01 0 4 : 5 3 : 1 2 ", I N T E R V A L "13-2" HOUR_MINUTE) ^"1999-11-30 15:51:12" Функция DATE_SUB () впервые появилась в MySQL 3.22.4. Х DAYNAME ( d a t e ]. Возвращает строку, содержащую название дня недели для значения даты date. DAYNAME("1999-12-01") ^ "Wednesday" DAYNAME("1900-12-01") ^ "Saturday" Функция DAYNAME () впервые появилась в MySQL 3.21.23. Х DAYOFMONTH (date). Возвращает числовое значение дня месяца для значения даты date в диапазоне от 1 до 31. DAYOFMONTH("1999-12-01") =>1 DAYOFMONTH("1999-12-25") ^25 Функция DAYOFMONTH {) впервые появилась в MySQL 3.21.22. Х DAYOFWEEK(utoe). Возвращает числовое значение дня недели для значения даты date. Значения дня недели находятся в диапазоне от 1 (воскресенье) до 7 (суббота). См. также описание функции WEEKDAY(). DAYOFWEEK("1999-12-05") ^1 Приложение В. Операторы и функции DAYNAME("1999-12-05") => "Sunday" DAYOFWEEK("1999-12-11") <*7 DAYNAME("199912-11") *> "Saturday" Функция DAYOFWEEKO впервые появилась в MySQL 3.21.15. Х DAYOFYEAR (date). Возвращает числовое значение дня года для значения даты date в диапазоне от 1 до 366. DAYOFYEAR("1999-12-01") DAYOFYEAR("2000-21-31") Функция DAYOFYEAR () впервые появилась в MySQL 3.21.22. Х EXTRACT (interval FROM datetime). Возвращает часть значения даты и времени datetime, указанную аргументом interval. В качестве последнего может выступать любой спецификатор, допустимый для функции DATE_ADD(). EXTRACT(YEAR FROM "1999-12-01 13:42:19") ^1999 EXTRACT(MONTH FROM "1999-12-01 13:42:19") "*12 EXTRACT(DAY FROM "1999-12-01 13:42:19") =>1 EXTRACT(HOUR_MINUTE FROM "1999-12-01 1 3 : 4 2 : 1 9 " ) ^1342 EXTRACT(SECOND FROM "1999-12-01 1 3 : 4 2 : 1 9 " ) =>19 Функцию EXTRACT () можно также использовать со значениями типа DATE. В этом случае при извлечении значения времени возвращается значение NULL. Функция EXTRACT () впервые появилась в MySQL 3.23.0. Х FROM_DAYS (я). Считывая числовое значение, представляющее число дней с. нулевого года (обычно происходит после вызова функции TOJ3AYS ()), возвращает соответствующую ему дату.

TO_DAYS("1999-12-01") ^730454 FROM_DAYS(730454 +3) => "1999-12-04" Функцию FROM_DAYS () можно применять только для дат Григорианского календаря (используется с 1582 года). Х FROMJJNIXTIME (unixjimestamp);

FROM_UNIXTIME (unixjimestamp,format). Считывая UNIX-значение временной метки unixjimestamp, например, возвращаемое функцией UNIXJTIMESTAMP (), выдает значение даты и времени в формате "YYYY-MM-DD hh:mm:ss" или в виде числа, представленного в формате "YYYYMMDDhhmmss". Выбор формата осуществляется в соответствии с контекстом, в котором задается данная функция. Если задан аргумент format, возвращаемое значение форматируется в виде строки так же, как и в функции DATE_FORMAT ().

Часть IV. Приложения FROM_UNIXTIME(934340541) FROM_UNIXTIME(944028000) FROM_UNIXTIME(944028000,"%Y") ^"1999-08-Ю 2 2 : 0 2 : 2 1 " <=>"1999-12-01 0 0 : 0 0 : 0 0 " O"1999" Функция FROMJJNIXTIME () впервые появилась в MySQL 3.21.5. Форма этой функции с двумя аргументами впервые появилась в MySQL 3.21.8. HOUR (time). Возвращает значение часа для заданного значения time в диапазоне от 0 до 23. HOUR("12:31:58") "*12 Функция HOUR () впервые появилась в MySQL 3.21.22. MINUTE (time). Возвращает значение минут для заданного временного значения time в диапазоне от 0 до 59. MINUTE("12:31:58") ^31 Функция MINUTE () впервые появилась в MySQL 3.21.22. MONTH (date). Возвращает числовое значение месяца года для заданного значения даты date в диапазоне от 1 до 12. MONTH("1999-12-01") =>12 Функция MONTH () впервые появилась в MySQL 3.21.22. MONTHNAME (date). Возвращает строку с названием месяца для заданного значения даты date. MONTHNAME("1999-12-01") ^"December" Функция MONTHNAME () впервые появилась в MySQL 3.21.23. N O W ( ). Возвращает текущую дату и время в виде строки, записанной в формате "YYYY-MM-DD hh:mm:ss", или числа, представленного в формате "YYYYMMDDhhmmss". Выбор строкового или числового значения осуществляется в соответствии с контекстом, в котором задается эта функция. NOW() NOW()+0 <=>"1999-08-10 18:51:43" ^19990810185143 временного PERIOD_ADD (period, и). Добавляет п месяцев к значению периода period и возвращает результат. Возвращаемое значение представлено в формате "YYYYMM". Аргумент period может иметь формат "YYYYMM" или "YYMM". Значение даты в этом аргументе не задается. PERIOD_ADD(199902,12) PERIOD ADD(9902,-3) ^200002 => Приложение В. Операторы и функции PERIODDIFF (period], period2). Рассчитывает разницу между представленными аргументами периодами и возвращает число месяцев между ними. Аргументы могут иметь формат "YYYYMM" или "YYMM". Значение даты в них не задается. PERIOD_DIFF (200002, 199902) =>12 PERIOD_DIFF(199811, 9902) -=>-3 QUARTER (date). Возвращает числовое значение квартала года для заданного значения даты date в диапазоне от 1 до 4. QUARTER("1999-12-01") =>4 QUARTER("2000-01-01") =>1 Функция QUARTER () впервые появилась в MySQL 3.21.22. SECOND (time). Возвращает числовое значение секунд для заданного временного значения time в диапазоне от 0 до 59. SECOND("12:31:58") SECOND(123158) Функция SECOND () впервые появилась в MySQL 3.21.22. SEC_TO_TIME (seconds). Считывая число секунд seconds, возвращает соответствующее временное значение в виде строки формата "АА:тт:55"или числа, представленного в формате "hhmmss". Выбор строкового или числового значения осуществляется в зависимости от контекста, в котором задается функция. SECJTOJTIME(29834) ^"08:17:14" SEC_TO_TIME(29834)+0 =>81714 Функция SEC_TO_TIME () впервые появилась в MySQL 3.21.5. SUBDATE (date, INTERVAL expr interval). Эта функция является аналогом функции DATE_SUB (). SYSDATE (). Эта функция является аналогом функции NOW (). TIME_FORMAT (time,format). Форматирует временное значение time в соответствии со строкой формата format и возвращает результирующую строку. Строка формата аналогична используемой в синтаксисе функции DATE_FORMAT (), однако могут задаваться только спецификаторы, относящиеся к значениям времени. При использовании других спецификаторов будет возвращаться значение NULL ИЛИ 0. TIME_FORMAT("12:51:58","%H % i " ) TIME_FORMAT(123158,"%Н % i " ) ^"12 31" =>"12 31" Функция TIME_FORMAT () впервые появилась в MySQL 3.21.3.

Часть IV. Приложения Х TIME_TO_SEC (time). Считывая значение времени time, представляющее прошедшее время, возвращает соответствующее ему общее число секунд. TIME_TO_SEC ("08:17 :14") <=>29834 Функция TIME_TO_SEC() впервые появилась в MySQL 3.21.16. Х TO_DAYS (date]. Возвращает числовое значение, представляющее собой преобразованное в число дней с нулевого года значение даты date. Для преобразования обратно в дату можно задать это значение функции FROM_DAYS(). TO_DAYS("1999-12-01") FROMDAYS (730454 - 365) О730454 >=>"1999-12-01" Функцию TO_DAYS () можно применять только для дат Григорианского календаря (используется начиная с 1582 года). Х UNIXJTIMESTAMPO ;

UNlxjriMESTAMp(Arre). При вызове без аргументов эта функция возвращает число секунд начиная с эпохи существования UNIX ("1970-01-01 00:00:00" GMT). Если же при вызове задается аргумент даты date, эта функция возвращает число секунд между указанной датой и началом эпохи. Аргумент date можно определять несколькими способами: в виде строки DATE или DATETIME, значения TIMESTAMP или числа, представляющего локальное время в формате "YYYYMMDD" или "YYMMDD". UNIXJTIMESTAMP() <=>934341073 UNIX_TIMESTAMP("1999-12-01") UNIXJTIMESTAMP(991201) Х =>944028000 ^ WEEK (date);

WEEK (date, first). При вызове с одним аргументом эта функция возвращает число, определяющее неделю года для значения даты date в диапазоне от 0 до 52. Предполагается, что неделя начинается с воскресенья. При вызове с двумя аргументами возвращает то же значение, но аргумент first указывает день, с которого начинается неделя. Если значение first равно 0, следовательно, неделя начинается с воскресенья. Если же этот аргумент имеет значение 1, неделя считается начавшейся с понедельника. WEEK("1999-12-05") WEEK("1999-12-05",0) WEEKC'1999-12-05", 1) Функция WEEK () впервые появилась в MySQL 3.21.22. Форма этой функции с двумя аргументами впервые появилась в MySQL 3.22.1.

Х WEEKDAY (date). Возвращает числовое значение дня недели для заданного значения даты date. Значения дней недели могут возвращаться в диапазоне от 0 для понедельника до 6 для воскресенья. См. также описание функции DAYOFWEEKO. Приложение В. Операторы и функции WEEKDAY{"1999-12-05") DAYNAME("1999-12-05") WEEKDAY("1999-12-13") DAYNAME("1999-12-13") <*6 ^"Sunday" ^0 ^"Monday" заданного YEAR(cto?e). Возвращает числовое значение года для значения даты date в диапазоне от 1000 до 9999. YEAR("1999-12-01") O1999 Функция YEAR () впервые появилась в MySQL 3.21.22. Суммирующие функции Суммирующие функции называются еще агрегатными функциями (aggregate functions). Они вычисляют одно результирующее значение на основании группы исходных значений. Результирующее значение рассчитывается только для значений выбранных строк, не равных NULL (исключением является лишь функция COUNT ( * ), которая подсчитывает число всех строк). Итоговые функции могут использоваться для подсчета суммы значений целых столбцов или суммирования отдельных значений, сгруппированных по другим столбцам или их комбинациям. Более детально об этом рассказывается в разделе "Получение итоговых результатов" главы 1, "Знакомство с СУБД MySQL и SQL". В примерах этого раздела используется таблица my_table со столбцом целочисленного типа my_col, который содержит шесть строк со значениями 1, 3, 5, 7, 9 и NULL. Х AVG(expr). Возвращает среднее значение аргумента ехрг для всех непустых значений выбранных строк. SELECT AVG(my_col) FROM my_table <=>5.0000 SELECT AVG(my_col)*2 SELECT AVG(my_col*2) FROM my_table ^10.0000 FROM my_table "^10. Х BIT_AND (expr). Возвращает значение поразрядного оператора И для аргумента ехрг для непустых значений выбранных строк. SELECT BIT_AND(my_col) FROM my_table Ol Функция BIT_AND () впервые появилась в MySQL 3.21.11. Х BIT_OR (expr). Возвращает значение поразрядного оператора ИЛИ для аргумента ехрг для ненулевых значений выбранных строк. SELECT BIT_OR(my_col) FROM my_table =>15 Функция BIT_OR() впервые появилась в MySQL 3.21.11. Х COUNT (expr). С любым аргументом, кроме символа "*", возвращает общее количество непустых значений в результирующем наборе. Если в функции задается аргумент "*", то результатом является Часть IV. Приложения общее количество всех строк в результирующем наборе, в том числе и содержащих значение NULL. SELECT COUNT (my_col) FROM mytable ^5 SELECT COUNT (*) FROM my_table <=>6 Функция COUNT ( * ), задаваемая без предложения WHERE, оптимизирована для быстрого возврата числа записей в указанной в предложении FROM таблице. Если задано сразу несколько таблиц, функция COUNT (*) возвращает произведение количества строк в отдельных таблицах: SELECT COUNT{*) FROM my_table AS ml, my_table AS m2 ^36 MAX (expr). Возвращает максимальное значение среди всех непустых значений выбранных строк в столбце ехрг. Функцию МАХ () можно также использовать со строками. В этом случае она возвращает самое большое лексикографическое значение. SELECT MAX(my_col) FROM my_table =i>9 MIN (expr). Возвращает минимальное значение среди всех непустых значений выбранных строк в столбце ехрг. Функцию МАХ () можно также использовать со строками. В этом случае она возвращает наименьшее лексикографическое значение. SELECT MIN(my_col) FROM my_table л1 STD(expr). Возвращает стандартное отклонение аргумента ехрг для всех непустых значений выбранных строк. SELECT STD(my_col) FROM my_table ^2.8284 STDDEV (expr}. Эта функция является аналогом функции STD (). SUM.(expr}. Возвращает сумму всех непустых значений выбранных строк в столбце ехрг. SELECT SUM(my_col) FROM my_table <=>25 Другие функции Описанные в этом разделе функции нельзя отнести ни к одной из вышеперечисленных категорий. Х BENCHMARK (count, expr). Рассчитывает выражение ехрг число раз, определенное аргументом count. Особенность функции BENCHMARK () состоит в том, что она предназначена для использования внутри клиентских программ mysql. Она всегда возвращает значение 0, которое никакого интереса не представляет. Основной интерес представляет время, выводимое программой mysql после отображения результатов запроса. mysql>SELECT BENCHMARK(100000, PASSWORD("secret"));

Приложение В. Операторы и функции I BENCHMARK(100000, PASSWORD("secret"}) I I j 0| i 1 row in set (1.63 sec) Это время является только приблизительным индикатором скорости вычислений, поскольку отражает время обработки для клиента, а не отдельное время обработки запроса процессором сервера. На это значение времени могут влиять такие факторы, как скорость загрузки на сервере, находится ли сервер в активном состоянии или загружен в момент получения запроса и т. п. Эту функцию желательно запускать несколько раз, чтобы оценить постоянство возвращаемого значения. Функция BENCHMARK () впервые появилась в MySQL 3.22.15. Х BIT_COUNT ( n ). Возвращает число определенных аргументом разрядов, которое обрабатывается как значение типа BIGINT (64разрядное целое значение). BIT_COUNT(0) 00 BIT_COUNT(1) BIT_COUNT(2) BIT_COUNT(7) BIT_COUNT(-1) Х 01 01 03 DATABASE (). Возвращает строку с именем текущей базы данных или пустую строку, если текущая база данных не задана. DATABAS E() О" s amp_db" DECODE (str,password). Считывая зашифрованную строку str, созданную ранее посредством вызова функции ENCODE (), расшифровывает ее с помощью строки пароля password и возвращает результат расшифровки. DECODE(ENCODE("secret","scramble"),"scramble") O"secret" ENCODE (str, password). Зашифровывает строку str с помощью строки пароля password и возвращает результат в виде двоичной строки. Строка может быть расшифрована функцией DECODE (). Поскольку зашифрованный результат является двоичной строкой, для его хранения следует использовать столбец одного из типов BLOB. ENCRYPT (str)', ENCRYPT (str, salt). Зашифровывает строку str и возвращает результирующую строку. Это шифрование является односторонним. Необязательный аргумент salt должен представлять собой строку из двух символов. При определенном значении salt зашифрованный результат для str будет одинаковым все время. Если Часть IV. Приложения Х Х Х аргумент salt не задается, идентичные вызовы функции ENCRYPT () приводят к различным результатам. ENCRYPT("secret","KB") <=>"ABSSSGhlEL6bk" ENCRYPT("secret","AB") ^"ABS5SGhlEL6bk" ENCRYPT("secret") ^"zloPSNlSWRwFA" ENCRYPT("secret") <*"12FjgqDtVOg7Q" Функция ENCRYPT () вызывает UNIX-функцию c r y p t o, соответственно от этой функции зависит и результат ENCRYPT (). Вопервых, если функция crypto отсутствует в системе, ENCRYPT () всегда возвращает значение NULL. Во-вторых, результат функции ENCRYPT О зависит от работы crypt () в каждой конкретной системе. Так, например, в некоторых системах crypt () шифрует только первые восемь символов строки. Функция ENCRYPT () впервые появилась в MySQL 3.21.12. Начиная с версии MySQL 3.22.16, аргумент salt может включать больше двух символов. GET_LOCK (str, timeout). Функция GET_LOCK() используется вместе с функцией RELEASE_LOCK () для установки и снятия блокировки. Эти две функции можно применять при создании приложений, взаимодействующих друг с другом по имени блокировки. Функция GET_LOCK () вызывается вместе с именем блокировки, определяемым строкой str, и значением периода, задаваемым аргументом timeout в секундах. Эта функция возвращает значение 1, если блокировка установлена в течении заданного периода, или значение 0, если блокировка установлена не была. Возникновение ошибки в процессе работы функции приводит к возврату значения NULL. Значение timeout определяет, сколько времени необходимо ждать до попытки установки блокировки (но не период времени, по достижении которого блокировка снимается). После установки блокировка остается постоянно активизированной до момента разблокировки пользователем. Например, следующая функция устанавливает блокировку с именем "Nellie", ожидая 10 секунд: GET_LOCK("Nellie", 10) Блокировка применима только к строке. Невозможно заблокировать базу данных, таблицу, или какую-либо строку либо столбец в пределах таблицы. Другими словами, блокировка не запретит другому клиенту вносить изменения в таблицы базы данных. Именно поэтому блокировка с помощью функции GET_LOCK () является только поверхностной Ч другие клиенты могут легко определять, установлена ли каким-либо пользователем блокировка.

Приложение В.'Операторы и функции Клиент, установивший блокировку на имя, не позволяет другим клиентам заблокировать это же имя (или подобные попытки других потоков многопотокового клиента, который поддерживает несколько соединений с сервером.) Предположим, например, что клиент 1 блокирует строку "Nellie". Если клиент 2 пытается блокировать эту же строку, она окажется недоступной до тех пор, пока клиент 1 не снимет блокировку или пока не истечет время заданного им периода. В первом случае клиент 2 впоследствии сможет успешно установить блокировку, а в последнем случае его постигнет неудача. Так как два клиента не могут блокировать данную строку одновременно, приложения, обращающиеся к данным по именам, могут использовать состояние блокировки этого имени как индикатор доступности или недоступности строки. Например, можно создать имя блокировки, основанное на значении уникального ключа для строки в таблице, что позволит выполнять совместную ее блокировку. Блокировка снимается только вызовом функции RELEASE_LOCK () с указанием имени блокировки: RELEASE_LOCK("Nellie") Функция RELEASE_LOCK () возвращает значение 1, если блокировка снята успешно, или значение 0, если блокировка установлена другим соединением (снимаются только собственные блокировки). Если блокировки с заданным именем не существует, функция возвращает значение NULL. Разрыв клиентского соединения или повторный вызов функции GET_LOCK () приводит к автоматическому снятию блокировки (один клиент в состоянии заблокировать только одну строку в определенный момент времени). В последнем случае старая блокировка снимается до установления новой, даже если имя новой блокировки подобно имени старой. Функцию GETLOCK(j/r, 0) можно также использовать для определения, установлена ли в текущий момент времени блокировка на строку str. (Если эта строка не заблокирована, то вызов данной функции приведет к установке блокировки. В таком случае следует не забывать вызвать функцию RELEASE_LOCK ( ). ) Функция GET_LOCK() впервые появилась в MySQL 3.21.7. Х LAST_INSERT_ID();

LAST_INSERT_ID(expr). Первая форма этой функции (без аргумента) возвращает значение AUTO_INCREMENT, которое было сгенерировано последним во время текущего сеанса работы сервера, или значение 0, если такое значение сгенерировано не было. Вторая форма функции LAST_INSERT_ID() предназначена для использования в операторе UPDATE. Результат ее обрабатывается таким же образом, как и автоматически созданное значение. Часть IV. Приложения Более детально об этой функции рассказывается в главе 2, "Работа с данными в MySQL". Результирующее значение обеих форм функции LAST_INSERT_ID () сохраняется сервером для каждого соединения в отдельности и не может быть изменено другими клиентами, даже задающими автоматическое создание новых значений. Форма функции LAST_INSERT_ID{) с аргументом впервые появилась в MySQL 3.22.9. Х LOAD_FILE (file_name). Считывает файл filejiame и возвращает его содержимое в виде строки. Файл должен располагаться на сервере и определяться с помощью абсолютного (полного) имени пути. Кроме того, этот файл должен быть открыт для общего доступа, поскольку попытка чтения защищенного файла обязательно завершится неудачей. Размещение файла на сервере вынуждает использующего функцию пользователя иметь привилегию FILE. Если хотя бы одно из этих условий не выполняется, функция LOAD_FILE () возвращает значение NULL. Функция LOAD_FILE () впервые появилась в MySQL 3.23.0. Х MD5 (str). Вычисляет контрольную сумму из строки str по алгоритму MD5 Message-Digest, разработанному компанией RSA Data Security, Inc.. Возвращаемое значение является строкой, состоящей из 32-шестнадцатеричных цифр. MD5("secret") O"5ebe2294ecdOeOf08eab7690d2a6ee69" Функция MD5 () впервые появилась в MySQL 3.23.2. Х PAS SWORD ( s t r ). Считывая строку str, возвращает зашифрованную строку пароля формы, используемой в таблицах разрешений MySQL. Это шифрование является односторонним. PASSWORD("secret") О"428567f408994404" Важно отметить, что функция PASSWORD () не использует алгоритм, применяемый в UNIX для шифровки паролей учетных записей. Для подобного шифрования используется функция ENCRYPT(). Х RELEASE_LOCK (Str}. ФуНКЦИЯ RELEASE_LOCK () ИСПОЛЬЗуеТСЯ ВМ6сте с функцией GET_LOCK (). Более детально о ней рассказывается в описании функции GET_LOCK (). Функция RELEASE_LOCK () впервые появилась в MySQL 3.21.7. Х SESSION_USER(). USER(). Х Эта функция является аналогом функции SYSTEM_USER (). Эта функция является аналогом функции USER ().

Х U S E R ( ). Возвращает строку, представляющую текущее пользовательское имя клиента. В MySQL версии 3.22.1 и более поздних эта Приложение В. Операторы и функции строка имеет форму "userdhost", где тег Ч имя пользователя, а host Ч имя компьютера, с которого клиент подключается к серверу. USER() =>"paul@localhost" SUBSTRING_INDEX(USER(), " @ ", 1) O" p a ul" SUBSTRING_INDEX(USER(), " @ ", - 1 ) ^"localhost" VERSION (). Возвращает строку, описывающую версию сервера, например " 3. 2 2. 2 5 - l o g ". За номером версии сервера можно увидеть суффиксы -log (регистрация активизирована), -debug (сервер работает в режиме отладки) или -demo (сервер работает в демонстрационном режиме). VERSION() =>"3.23.1-alpha-log" Функция VERSION () впервые появилась в MySQL 3.21.13.

Часть IV. Приложения г Синтаксис SQL В этом приложении описываются все используемые в MySQL операторы языка SQL, а также синтаксис написания комментариев в SQLкоде. Комментарии, как правило, применяются для ввода описательного текста, пропускаемого сервером при выполнении, а также сокрытия ключевых слов MySQL (эти слова исполняются сервером MySQL, но игнорируются другими серверами баз данных) Более детально об этом рассказывается в разделе "Синтаксис комментариев". Поскольку в настоящее время развитие MySQL все еще продолжается, код SQL также постоянно совершенствуется. Чтобы узнать о новых возможностях MySQL, обратитесь к постоянно обновляемому руководству по MySQL, доступному по адресу: / / w w w. m y s q l. com/ В представленном далее описании синтаксиса используются следующие условные обозначения. Х Необязательная информация заключается в квадратные скобки ([ ]). Если в квадратные скобки заключен список, значит, можно выбрать один из его элементов. Х Если список заключен в фигурные скобки ({}), значит, обязательно должен быть выбран один из его элементов. Х Вертикальная черта (|) разделяет альтернативные элементы списка. Приложение Г. Синтаксис SQL Х Троеточие (... ) определяет, что предшествующая ему последовательность может быть продолжена. Описанные далее операторы могут использоваться в MySQL, начиная с версии 3.22.0 (если не указано иное).

Операторы SQL В этом разделе рассматривается синтаксис и дается описание используемых в MySQL операторов SQL. Следует заметить, что отсутствие достаточных привилегий для запуска оператора приводит к его безуспешному завершению. Так, например, если пользователь, не обладающий правами доступа к базе данных db_name, попытается исполнить оператор USE db_name, эта попытка закончится провалом. ALTER TABLE ALTER TABLE [IGNORE] TABLE tbl_name action Jist Оператор ALTER TABLE позволяет переименовывать таблицу и изменять ее структуру. Для его выполнения задайте имя таблицы tbljiame и определите операции, которые необходимо выполнить над таблицей Ключевое слово IGNORE используется в тех случаях, когда в новой таблице дублируются значения уникальных ключей. Если это ключевое слово не задано, оператор ALTER TABLE не выполняется. Если это слово имеется, строки с одинаковыми значениями для уникальных ключей удаляются. Предложение actionJist определяет одно или несколько разделяемых запятыми операций. Все эти операции выполняются в порядке указания. В качестве операций можно задавать следующие. Х ADD [COLUMN] coljdeclaration [FIRST I AFTER со1_пате]}. Добавляет столбец в таблицу, coljieclaration Ч это описание столбца, которое имеет такой же формат, как и в операторе CREATE TABLE. При задании ключевого слова FIRST столбец вставляется первым. Если же задается предложение AFTER coljname, новый столбец вставляется после столбца coljname. Если позиция столбца не определена, он вставляется последним. ALTER TABLE member ADD member_ad INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ALTER TABLE member ADD member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ALTER TABLE member ADD member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY AFTER s u f f i x Часть IV. Приложения Х ADD INDEX [index_name] (index_columns). Добавляет индекс в таблицу. Индекс создается по столбцам, которые перечислены в предложении index_columns, и обязательно относятся к таблице tbljiame. Если указывается несколько столбцов, их имена следует разделять запятыми. Для столбцов типа CHAR и VARCHAR можно создавать индекс по префиксу столбца. В этом случае для индексирования первых п символов значений столбца применяется синтаксис coljiame(n). Для столбцов типа BLOB и TEXT обязательно нужно определить значение префикса. Нельзя индексировать по всему столбцу. Если имя индекса indexjiame не определено, оно создается автоматически, основываясь на имени первого индексируемого столбца. Х ADD PRIMARY KEY (index_columns). Добавляет первичный ключ с именем PRIMARY по определенным столбцам. Столбцы index_columns определяются так же, как и для предложения ADD INDEX. Если первичный ключ уже существует, результатом выполнения этой операции будет ошибка. ALTER TABLE president ADD PRIMARY KEY (last_name, first_name) Х ADD UNIQUE [index_name] (index_columns). Добавляет индекс с уникальным значением по таблице tbljiame. Параметры index_name и index_columns определяются так же, как и для предложения ADD INDEX. ALTER TABLE absence ADD UNIQUE id_date (student_id, date) Х ALTER [COLUMN] coljiame {SET DEFAULT value \ DROP DEFAULT). Изменяет установленное по умолчанию значение столбца либо на новое значение, либо просто удаляя текущие значения по умолчанию. В последнем случае присваивается новое значение по умолчанию в соответствии с оператором CREATE TABLE. ALTER TABLE event ALTER type SET DEFAULT "Q" ALTER TABLE event ALTER type DROP DEFAULT Х CHANGE [COLUMN] col_name col_declaration. Изменяет название и описание столбца. col_name Ч это текущее имя изменяемого столбца, a col_declaration Ч его новое описание. Предложение col_decaration имеет такой же формат, какой используется для оператора CREATE TABLE. Обратите внимание: в описания столбца включено его новое имя, поэтому если необходимо оставить это имя неизменным, его обязательно нужно ввести дважды. ALTER TABLE student CHANGE name name VARCHAR(40) ALTER TABLE student CHANGE name student_name CHAR(30) NOT NULL Приложение Г. Синтаксис SQL, Х DROP [COLUMN] col_name. Удаляет определенный столбец из таблицы. Если удаляемый столбец входит в индексы, он одновременно будет удален и из индексов. Удаление всех столбцов индекса приводит к удалению и самого индекса. ALTER TABLE president DROP s u f f i x Х DROP INDEX index_name. Удаляет определенный индекс. ALTER TABLE member DROP INDEX name Х DROP PRIMARY KEY. Удаляет первичный ключ из таблицы. Если же в таблице отсутствует уникальный индекс, созданный как ключ PRIMARY KEY, однако имеются один или несколько индексов UNIQUE, удаляется первый из этих индексов. ALTER TABLE president DROP PRIMARY KEY m MODIFY [COLUMN] col_declaration. Изменяет описание столбца. Описание столбца col_declaration дается в таком же формате, как и для элемента оператора CREATE TABLE. Оно начинается с нового имени столбца. Операция MODIFY впервые появилась в MySQL версии 3.22.16. ALTER TABLE student MODIFY name V A R C H A R ( 4 0 ) DEFAULT "" NO NULL Х RENAME [AS] newjbl_name. Переименовывает таблицу tbljiame в ne\v_tbljname. ALTER TABLE president RENAME prez Х tablejaptions. Определяет опции сортировки таблицы, которые можно задавать в части table_options оператора CREATE TABLE. ALTER TABLE score TYPE = MYISAM CHECKSUM = CREATE DATABASE CREATE DATABASE dbjiame. Создает базу данных с заданным именем. Этот оператор не выполняется, если такая база данных уже существует или пользователь не обладает достаточными привилегиями для ее создания.

CREATE FUNCTION CREATE [AGGREGATE] FUNCTION functionJWtne RETURNS {STRING | REAL INTEGER) SONAME shared_library_name. Загружает определенную пользователем функцию (user-defined function Ч UDF) в таблицу func базы данных mysql. Впоследствии на эту функцию из операторов SQL можно ссылаться по имени functionjiame. Следующее за предложением RETURNS ключевое слово определяет тип зна634 Часть IV. Приложения чений, возвращаемых функцией. Название файла с исполняемым кодом или функцией и путь к нему определяются элементом sharedJibrary_name. Ключевое слово AGGREGATE определяет, что функция является групповой, например, как функции SUM () или МАХ (). Это ключевое слово впервые появилось в MySQL версии 3.23.5. Для выполнения оператора CREATE FUNCTION необходимо, чтобы сервер был построен в виде динамически связанного двоичного кода (не статического), поскольку динамические связи используются механизмом UDF. Указания по написанию определяемых пользователем функций можно найти в справочном руководстве по MySQL.

CREATE INDEX CREATE [UNIQUE] INDEX indexjiame ON tbljiame (index_columns). Добавляет индекс indexjiame по таблице tbljiame. Этот оператор выполняется как оператор ALTER 'TABLE ADD INDEX или ALTER TABLE ADD UNIQUE в зависимости от того, добавлено или нет ключевое слово UNIQUE. Более детальную информацию о нем можно найти в описании оператора ALTER TABLE. Оператор CREATE INDEX впервые появился в MySQL серии 3.22.

CREATE TABLE CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (createjdeflnition,...) [ table_options] [[IGNORE | REPLACE] select_statement] createjleflnition: { col_declaration \ PRIMARY KEY (index_columns) \ KEY [index_name] (index_columns) 1 INDEX [indexjiame} (indexj:olumns) I UNIQUE [INDEX] [index_name] (index_columns) I [CONSTRAINT symbol] FOREIGN KEY indexjiame | [ reference_definition} 1 CHECK (expr) ) (indexj:olumns) coljdeclaration: coljiame coljype [NOT NULL | NULL] [DEFAULT default_value} [AUTO_INCREMENT] [ PRIMARY_KEY] [ referencejlefinition] reference_deflnition: REFERENCES tbljiame [ (indexj:olumns) ] [MATCH FULL | MATCH PARTIAL] [ON DELETE reference_option} [ON UPDATE referencej>ption] referencejtption:

{RESTRICT I CASCADE I SET NULL | NO ACTION | SET DEFAULT} Приложение Г. Синтаксис SQL Оператор CREATE TABLE создает новую таблицу с именем tbl_name. Если указывается ключевое слово TEMPORARY, таблица существует только до конца текущего клиентского соединения или запуска оператора DROP TABLE, после чего удаляется. Временную таблицу может "видеть" только создавший ее пользователь. Как правило, попытка создать таблицу с уже используемым именем приводит к появлению ошибки. Эта ошибка, однако, не появляется в двух случаях. Во-первых, при определении предложения IF NOT EXISTS ошибка не выводится, хотя и таблица не создается. Во-вторых, если определено ключевое слово TEMPORARY, а ранее созданная таблица не является временной, создается новая временная таблица, однако на время ее существования исходная таблица tbljwme недоступна для клиента. Все остальные клиенты могут продолжать с ней работать. Исходная таблица становится доступной в следующем сеансе работы или сразу после удаления временной таблицы с помощью оператора DROP TABLE. Список create_definition определяет имена создаваемых столбцов и индексов. Он необязателен, если таблица создается с помощью вложенного оператора SELECT. Предложение table_options позволяет определить различные свойства таблицы. При определении оператора select_statement (представленного в форме любого оператора SELECT) таблица создается с помощью результирующего набора, возвращаемого оператором SELECT. Более подробно эти предложения описываются в следующих разделах. Ключевое слово TEMPORARY, предложения IF NOT EXISTS и table_options, а также возможность создания таблицы из результатов оператора SELECT впервые появилась в версии MySQL 3.23. В качестве описания create_definition может выступать описание столбца, определение индекса, предложение FOREIGN KEY, reference^definition пик предложение CHECK. Последние три задаются для совместимости с другими системами баз данных и во всех остальных случаях игнорируются. Описание столбца coljdeclaration начинается с имени столбца coljwme и его типа coljtype и может сопровождаться несколькими необязательными ключевыми словами. В качестве типов столбца можно выбирать любой тип из описанных в приложении Б, "Типы столбцов". В этом приложении можно также найти описание специфических атрибутов типов. При определении типа столбца можно определять следующие ключевые слова. Х NULL или NOT NULL. Определяет, может или нет столбец содержать значения NULL. По умолчанию установлено значение NULL. Х DEFAULT default_value. Определяет значение по умолчанию для столбца. Это ключевое слово нельзя использовать для типов BLOB или TEXT. Если значение по умолчанию не определено, то такое значение присваивается автоматически. Так, в столбцах, в которых можно вводить значение NULL, по умолчанию устанавливается значение NULL. Если же это значение запрещено для ввода, значение по умолчанию устанавливается следующим образом. 636 Часть IV. Приложения Х Для числовых столбцов, кроме столбцов AUTO_INCREMENT, значение по умолчанию устанавливается равным 0. В столбце AUTO_INCREMENT значением по умолчанию является следующее значение в последовательности столбца. Х Для типов даты и времени, кроме TIMESTAMP, по умолчанию устанавливается значение "ZERO" для типа (например, "0000:00:00" для типа DATE). Для типа TIMESTAMP по умолчанию устанавливается текущее значение даты и времени. Х Для строковых типов, кроме типа ENUM, значением по умолчанию является пустая строка. Для типа ENUM таким значением является первый элемент перечня. Х AUTO_INCREMENT. Это ключевое слово применяется только к столбцам целочисленных типов. Особенность столбца AUTO_COLUMN заключается в том, что при вставке в него значения NULL реально вставляется целое число, которое на единицу больше максимального текущего значения столбца. По умолчанию значения столбца AUTOINCREMENT начинаются с 1. Первое значение можно определять ЯВНЫМ образом С ПОМОЩЬЮ Табличной ОПЦИИ AUTO_INCREMENT. Кроме того, столбец должен быть определен как индекс UNIQUE или PRIMARY KEY и не должен иметь значения NOT NULL. Число столбцов AUTO_INCREMENT в таблице не может превышать одного. Х PRIMARY KEY. Определяет столбец как первичный ключ PRIMARY KEY. Х UNIQUE. Определяет столбец как индекс UNIQUE. Этот атрибут можно определять в MySQL версии 3.23 и выше. Предложения PRIMARY KEY, UNIQUE и KEY определяют индексы, причем первые два определяют индексы, которые должны содержать уникальные значения. Предложения INDEX и KEY являются синонимами и определяют индексы, которые могут содержать повторяющиеся значения. Определяемый индекс базируется на перечисленных в index_columns столбцах, каждый из которых должен быть столбцом таблицы tbl_name. Если указывается сразу несколько столбцов, их названия следует разделить запятыми. Для столбцов типа CHAR и VARCHAR можно индексировать префикс столбца, используя синтаксис col_name(n) для индексирования первых л символов значений столбца. Нельзя индексировать весь столбец. Если пользователь не указывает имя индекса index_name, оно выбирается автоматически на основании имени первого индексируемого столбца. _ В версиях, предшествующих версии MySQL 3.23, индексируемые столбцы необходимо определять как NOT NULL. Во всех более поздних версиях таким образом описывать необходимо только столбцы, входящие В индексы PRIMARY KEY. Предложение Jablejoptions появилось в версиях MySQL версии 3.23. Если оно присутствует, то может содержать одно или более количество описанных ниже опций. Если определяется сразу несколько опций, они Приложение Г. Синтаксис SQL разделяются запятыми. Каждый определенный спецификатор применяется ко всем типам таблиц (если иное не указано). Х AUTO_INCREMENT = п. Первое значение AUTO_INCREMENT, генерируемое для таблицы (используется только для таблиц MylSAM). Х AVG_ROW_LENGTH = /;

. Приблизительная средняя длина строки таблицы. Эта опция используется MySQL для расчета максимального размера файла данных и требуется только для таблиц со столбцами типов BLOB или TEXT, размеры файлов которых могут превышать 4 Гбайта. Х CHECKSUM = {0 | 1}. Если эта опция имеет значение 1, MySQL рассчитывает контрольную сумму для каждой строки таблицы. Это незначительно отражается на скорости обновления таблицы, однако повышает шансы успешной проверки таблицы (используется только для таблиц MylSAM). Х COMMENT = "string". Комментарий к таблице, максимальная длина которого не должна превышать 60 символов. Х DELAY_KEY_WRITE = (0 ) 1}. Если эта опция имеет значение 1, кэш индекса обновляется периодически для всей таблицы, а не после каждой операции вставки (используется только для таблиц формата MylSAM). Х MAX_ROWS = п. Максимальное число строк, которое планируется хранить в таблице. Х MIN_ROWS = п. Минимальное число строк, которое планируется хранить в таблице. Х PACK_KEYS = {0 | 1). Если эта опция имеет значение 1, блоки индексов группируются с более высоким процентным соотношением, чем обычно. Это, безусловно, отражается на скорости обновления, однако повышается эффективность извлечения. Если же эта опция имеет значение 0, блоки индексов не группируются специальным образом. Другими словами, группируются только индексы с ключевыми значениями типов CHAR или VARCHAR длиной 8 символов и более (используется только для таблиц формата MylSAM и формата ISAM). Х PASSWORD = "string". Определяет пароль для шифрования файла описания таблицы. Как правило, эта опция не приводит к желаемому эффекту, поскольку активизируется только для определенных клиентов. Х TYPE = {ISAM | MY I SAM | HEAP }. Определяет формат хранения таблицы. Основные характеристики форматов хранения описаны в разделе "Спецификация типа памяти" главы 3, "Синтаксис и использование языка SQL". В версии MySQL 3.23 и более поздних по умолчанию используется формат MylSAM. В более ранних версиях MySQL оператор CREATE TABLE создает таблицы в формате ISAM. 638 Часть IV. Приложения При добавлении предложения select^statement (запрос SELECT) таблица создается с помощью результирующего набора, возвращаемого запросом. Строки, содержащие дублирующие значения в столбцах уникального индекса, либо пропускаются, либо заменяются существующими строками. Решение об этом принимается в зависимости от наличия слова IGNORE или REPLACE. Если ни одно из них не определено, возникает ошибка, и все оставшиеся записи пропускаются. Предположим, например, что необходимо создать таблицу с тремя столбцами. Столбец id представляет собой ключ PRIMARY KEY, а два столбца имени индексируются вместе. Можно воспользоваться следующим оператором:

CREATE TABLE customer ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, last_name CHAR(30) NOT NULL, first_name CHAR(20) NOT NULL, PRIMARY KEY (id), INDEX (last_name, firstname) ) Теперь давайте создадим временную таблицу и для ускорения работы сделаем ее НЕАР-таблицей (т.е. загруженной в память):

CREATE TEMPORARY TABLE tmp_table (id MEDIUMINT NOT NULL UNIQUE, name CHAR(40 TYPE = HEAP Создать новую таблицу, как копию уже существующей, можно следующим образом:

CREATE TABLE prez_copy SELECT * FROM president Чтобы создать таблицу, используя только часть другой таблицы, достаточно ввести следующий оператор:

CREATE TABLE prez_alive SELECT last_name, first_name, birth FROM president WHERE death IS NULL Если описание определяется для таблицы, созданной и заполненной с помощью оператора SELECT, то заданное описание применяется уже после вставки содержимого таблицы. Так, например, определить включение извлеченного столбца в ключ PRIMARY KEY можно следующим образом:

CREATE TABLE newtbl (PRIMARY KEY (a) ) SELECT a, b, с FROM old_tbl DELETE DELETE [LOW_PRIORITY] FROM tbl_name [WHERE where_expr] [LIMIT n] Удаляет строки из таблицы tbl_name. Удалению подлежат все строки, удовлетворяющие описанным в выражении whereexpr условиям:

DELETE FROM score WHERE event_id = 14 DELETE FROM member WHERE expiration < CURRENT DATE Приложение Г, Синтаксис SQL Если предложение WHERE пропущено, из таблицы удаляются все записи. После выполнения оператор DELETE возвращает количество удаленных записей. Исключение составляют лишь те случаи, когда не определено предложение WHERE и удаляются все записи таблицы. В MySQL эта процедура оптимизирована и вместо последовательного удаления всех строк просто создаются новые файлы данных и индексов. Хотя такой подход значительно ускоряет работу, подсчет строк не выполняется, в результате чего возвращается нулевое значение. Для подсчета числа удаленных строк следует определить предложение WHERE, удовлетворяющее всем строкам. Например: DELETE FROM tbl_name WHERE 1 > О Этот оператор, однако, будет выполняться несколько медленней, чем оператор без предложения WHERE. При определении ключевого слова LOW_PRIORITY оператор не выполняется до тех пор, пока все клиенты не закончат чтение таблицы. Это ключевое слово впервые появилось в версии MySQL 3.22.5. Значение и предложения LIMIT определяет максимальное число строк, которые будут удалены. Предложение LIMIT впервые появилось в MySQL 3 22.7. DESCRIBE {DESCRIBE DESC} tbljname (col_name \ pattern]. Этот оператор выводит такую же информацию, как и оператор SHOW COLUMNS. Более подробно о его использовании рассказывается в разделе, посвященном описанию оператора SHOW. DROP DATABASE DROP DATABASE [IF EXISTS] db_name. Удаляет определенную базу данных. Рекомендуется всегда проверять выполнение оператора по завершению его работы. Оператор приостановит свою работу, если указанная таблица не существует (и не определено предложение IF EXISTS) или запустивший его пользователь не обладает достаточными привилегиями. Предложение IF EXISTS можно использовать, чтобы избежать вывода сообщения об ошибке при отсутствии указанной базы данных. Это предложение впервые появилось в MySQL версии 3.22.2. Как известно, база данных представляется в виде каталога, расположенного внутри каталога данных. Если в этот каталог базы данных поместить файлы, не имеющие никакого отношения к таблицам, то в процессе выполнения оператора DROP DATABASE они удалены не будут. Не удалится и собственно каталог.

Часть IV. Приложения DROP FUNCTION DROP FUNCTION functionjiame. Удаляет определенную пользователем функцию, загруженную ранее с помощью оператора CREATE FUNCTION. DROP INDEX DROP INDEX indexjiame ON tbljiame. Удаляет индекс index_name таблицы tbljiame. Это оператор обрабатывается так же, как и ALTER TABLE DROP INDEX. Более детально о его функциях рассказывается в разделе, посвященном оператору ALTER TABLE. Оператор DROP INDEX впервые появился в MySQL версии 3.22. DROP TABLE DROP TABLE [IF EXISTS] tbljiame [,tbl_name]... Удаляет указанную таблицу (или таблицы) из базы данных. Если в оператор включено предложение IF EXISTS, удаление несуществующей базы данных не приведет к ошибке. Это предложение впервые появилось в MySQL версии 3.22.2. EXPLAIN EXPLAIN tbljiame EXPLAIN select^statement Первая форма этого оператора является аналогом оператора SHOW COLUMNS FROM tbljiame. Для получения детальной информации о нем обратитесь к описанию оператора SHOW. Вторая форма оператора EXPLAIN предоставляет информацию о том, как MySQL выполнит представленные за ключевым словом EXPLAIN операторы SELECT. I EXPLAIN SELECT score.* FROM score, event WHERE score.event_id = event.event_id AND event.event_id = Выводимый результат выполнения оператора EXPLAIN состоит из одной из нескольких строк со следующими столбцами. Х table. Таблица, на которую ссылается строка вывода. Х type. Тип соединения, выполняемый системой MySQL. В качестве возможных типов могут выступать (в порядке ухудшения качества): system, const, eq_ref, range, index и ALL. Типы, обеспечивающие наивысшее качество соединения, задают больше ограничений, т.е. при их определении MySQL в процессе выборки приходится просматривать наименьшее число строк. Приложение Г. Синтаксис SQL 2J-1729 Х possible_keys. Индексы, которые MySQL рассматривает как возможные кандидатуры для нахождения строк в таблице. Значение NULL указывает на отсутствие индексов. Х key. Индекс, используемый MySQL для нахождения строк таблицы. Значение NULL указывает, что ни один индекс использоваться не будет. Х key_len. Длина используемой части индекса. Если MySQL будет использовать левый крайний префикс индекса, это значение не может быть больше полной длины строки индекса. Х ref. Значение, с которыми MySQL сравнивает значения индекса. Слово const или ??? указывает на сравнение с константой, а имя столбца отражает операцию сравнения столбцов. Х rows. Приблизительное число строк таблицы, которое MySQL необходимо исследовать перед выполнением запроса. Приведенное в этом столбце значение отражает приблизительное общее число комбинаций строк, которые необходимо просмотреть во всех таблицах. Х Extra. Значение Only index в этом столбце указывает, что для извлечения данных достаточно информации индексов и просматривать файл данных не нужно. Значение where used указывает на использование информации в предложении WHERE оператора SELECT. FLUSH FLUSH flush_option [, flush_option]... Обновляет различные используемые сервером кэши. В качестве опции f!ush_option может выступать любой из следующих элементов. Х HOSTS. Обновляет кэш хоста. Х LOGS. Обновляет файлы журналов, закрывая и заново открывая их. Х PRIVILEGES. Перезагружает таблицы разрешений. Х STATUS. Повторно инициализирует переменные состояния. Х TABLES. Закрывает все открытые таблицы в кэше таблиц. Оператор FLUSH впервые появился в MySQL 3.22.9, а опция STATUS Ч в версии 3.22.11. Оператор GRANT GRANT privjype [ (columnJist)} [, privjype { (columnJist)} ].. ON {*.* | * | db_name.* \ db_name.tbl_name \ tbl_name) TO user [, user]... [WITH GRANT OPTION] Часть IV. Приложения Оператор GRANT предоставляет привилегии доступа одному или нескольким пользователям MySQL. Предоставляемые привилегии определяются значением priv_type. Это значение, в свою очередь, состоит из одного или нескольких разделенных запятыми типов привилегий, выбранных из следующего списка. Спецификатор Операция, разрешенная привилегией привилегии ALTER CREATE DELETE DROP INDEX INSERT REFERENCES SELECT UPDATE FILE PROCESS RELOAD SHUTDOWN ALL USAGE Изменение таблиц и индексов Создание баз данных и таблиц Удаление записей из таблиц Удаление баз данных и таблиц Создание или удаление индексов Вставка новых записей в таблицы He используется Выборка записей из таблиц Изменение существующих записей таблиц Чтение и запись файлов на сервере Просмотр информации о потоках, выполняемых внутри сервера, и завершение их работы Перезагрузка таблиц разрешений и обновление журналов, кэша главного компьютера и кэша таблиц Завершение работы сервера Все операции Аналог Ч ALL PRIVILEGES Специальная привилегия "без привилегий" Каждый пользователь может просматривать свои потоки и завершать их работу. Пользователь, обладающий привилегией PROCESS, может просматривать и останавливать все потоки, включая потоки других пользователей. Предложение ON определяет, к какому уровню данных предоставляются привилегии. Для этого применяются спецификаторы, описанные в приведенной ниже таблице. Если в предложении ON указывается имя конкретной таблицы, привилегии можно предоставлять для доступа к определенным столбцам. При перечислении в списке columnjtist их названия разделяются запятыми.

Приложение Г. Синтаксис SQL Спецификатор привилегии *.* * Уровень применения привилегии Глобальные привилегии: все базы данных и все таблицы Глобальные привилегии, если не определена база данных по умолчанию. В любом другом случае привилегии на доступ к текущей базе данных Привилегии уровня базы данных: все таблицы указанной базы данных Привилегии уровня таблицы: все столбцы указанной таблицы Привилегии уровня таблицы: все таблицы указанной таблицы базы данных по умолчанию db_name db_name.tbl_name tbl_name В предложении ТО определяется пользователь (или пользователи), которым предоставляются привилегии. Каждый спецификатор user включает имя useri_name@hostname с необязательным предложением IDENTIFIED BY. В качестве имени пользователя userjiame может выступать как обычное имя, так и пустая строка (""), которая определяет анонимного пользователя. В качестве имени компьютера hostname можно указывать localhost, имя компьютера, IP-адрес или образец, соответствующий имени домена или сетевому номеру. Символы типа "%" и "_" имеют такое же значение, как и в операторе LIKE. Предложение userjiame без определенного имени компьютера является аналогом записи user_name@%. В MySQL версии 3.23 и выше в качестве имени компьютера host_name может выступать пара IP-адрес/маска сети, представленная в записи n.n.n.n/m, где n.n.n.n Ч IP-адрес, amЧ число бит, используемых для сетевого номера. Предложение IDENTIFIED BY позволяет присвоить пароль пользователю. Этот пароль должен задаваться простым текстом (без функции PASSWORD), в отличие от способа определения пароля с помощью оператора SET PASSWORD. Если такой пользователь уже существует, а предложение IDENTIFIED BY определено, новый пароль заменяет старый. В любом другом случае старый пароль остается неизменным. Оператор GRANT впервые появился в MySQL 3.22.11. Ниже представлено несколько примеров использования оператора GRANT. Дополнительные примеры можно найти в главе 11, "Общее администрирование MySQL". Давайте сначала создадим пользователя paul, который с любого компьютера сможет получать доступ ко всем таблицам базы данных samp_db. Два следующих оператора являются эквивалентными, поскольку отсутствующая часть имени компьютера в идентификаторе user является аналогом символа "%": 644 Часть IV. Приложения GRANT ALL ON samp_db.* TO paul IDENTIFIED BY "secret" GRANT ALL ON samp_db.* TO paul@% IDENTIFIED BY "secret" Теперь создадим пользователя с правами чтения таблиц базы данных menagerie. Этот пользователь сможет подключаться к ним только с компьютеров домена xyz. com:

GRANT SELECT ON menagerie.* TO lookonly@%.xyz.com IDENTIFIED BY "ragweed" Для создания пользователя, который обладает полными привилегиями для доступа к таблице member базы данных samp_db, но может подключиться только с одного компьютера, воспользуйтесь следующим оператором:

GRANT ALL ON samp_db.member TO member_mgr@boa.snake.net IDENTIFIED BY "doughnut" Чтобы создать суперпользователя, который может выполнять все операции, в том числе и предоставлять привилегии другим пользователям, однако подключаться только с локального компьютера, примените оператор:

GRANT ALL ON *.* ТО superduper@localhost WITH GRANT OPTION IDENTIFIED BY "homer" И наконец, давайте создадим анонимного пользователя для базы данных menagerie, который может подключаться с локального компьютера без пароля:

GRANT ALL ON menagerie.* TO ""@localhost INSERT INSERT [LOW PRIORITY | DELAYED] (IGNORE] [INTO] tbl_name [ (columnjist) ] VALUES (expr [, expr]... ) [, (... ) ] INSERT [LOW PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [ (columnjist) ] SELECT... INSERT [LOW PRIORITY DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expr {, col_namc=expr]......

Вставляет строки в существующую таблицу tbljiame и возвращает число вставленных строк. Ключевое слово необходимо использовать только в MySQL 3.22.5. При определении ключевого слова LOW_PRIORITY оператор не выполняется, пока хоть один пользователь читает данные таблицы. Это слово впервые появилось в MySQL версии 3.22.5. При определении ключевого слова DELAYED строки помещаются в очередь для более поздней вставки, и оператор завершает свое выполнение. Благодаря этому клиент может довольно быстро продолжить работу. Однако в этом случае функция LAST_INSERT_ID () не возвратит значение AUTO_INCREMENT ДЛЯ столбца AUTO_INCREMENT Таблицы. Ключевое слово DELAYED впервые появилось в MySQL версии 3.22.15.

Приложение Г. Синтаксис SQL Если задано ключевое слово IGNORE, все строки с дублирующим значением для уникальных ключей игнорируются. Если же это слово не определено, а такие строки имеются, возникает ошибка и последующие строки не вставляются. Ключевое слово IGNORE впервые появилось в MySQL версии 3.22 10. Первая форма оператора INSERT требует определения списка VALUES () всех вставляемых значений. Если список столбцов columnjist не определен, список VALUES () должен задавать по одному значению для каждого столбца таблицы. Если в списке column_hst указывается несколько имен столбцов, их следует разделять запятыми Соответственно для каждого указанного столбца необходимо определить в списке VALUES () по одному значению. Столбцам, имена которых не указаны в списке, присваиваются значения по умолчанию. В версиях MySQL 3.22.5 и более поздних можно определять несколько списков значений, что позволяет с помощью одного оператора INSERT вставлять несколько строк. В MySQL версии 3.23.3 и более поздних версий список VALUES () может быть пустым. В таком случае вставляется новая строка, во всех столбцах которой устанавливаются значения по умолчанию Вторая форма оператора INSERT выбирает записи в соответствии с установками оператора SELECT и вставляет их в таблицу tbljiame. Оператор SELECT должен выбирать столько столбцов, сколько содержится в таблице ibljiame или определено в списке column_list. Если определен список столбцов, то не указанные в нем столбцы заполняются значениями по умолчанию. Третья форма оператора INSERT, впервые появившаяся в MySQL 3.22.10, вставляет определенные в предложении SET столбцы, устанавливая в них заданные выражения. И опять, если имя столбцов не указывается, в них устанавливаются значения по умолчанию.

INSERT INTO absence (student_id, date) VALUES(14, "1999-11-03"),(34,NOW()) INSERT INTO absence SET student_id = 14, date = "1999-11-03" INSERT INTO absence SET student_id = 34, date = NOW() INSERT INTO score (student_id, score, event_id) SELECT student_id, 100 AS score, 15 AS event_id FROM student KILL KILL threadJd Удаляет поток сервера с номером threaded. Для выполнения этого оператора пользователь должен обладать привилегией PROCESS. Иначе пользователь сможет удалить только свой собственный поток. Команда mysqladmin kill позволяет выполнить аналогичную операцию, хотя в ее командной строке можно задать сразу несколько ID-номеров потоков. В строке оператора KILL можно задать только один номер. Этот оператор впервые появился в MySQL 3.22.9. 646 Часть IV. Приложения LOAD DATA LOAD DATA [LOW PRIORITY] [LOCAL] INFILE file_name [IGNORE REPLACE] INTO TABLE tbljname import_options [IGNORE П LINES] [ (columnJist) ] Оператор LOAD DATA считывает записи из файла file_name и загружает их в таблицу tbljiame. Этот оператор работает быстрее, чем INSERT. При задании ключевого слова LOW_PRIORITY оператор не выполняется, если кто-либо из пользователей считывает данные таблицы. Это ключевое слово впервые появилось в MySQL серии 3.23 Как правило, заданный файл считывается сервером с компьютера, на котором сервер MySQL установлен. Соответственно, запускающий этот оператор пользователь должен обладать привилегией FILE, а сам файл должен располагаться в каталоге базы данных или быть открытым для считывания. Если определено ключевое слово LOCAL, файл считывается с компьютера клиента и отправляется на сервер через сеть. В этом случае необходимость в привилегии FILE отпадает. Впервые ключевое слово LOCAL появилось в MySQL версии 3.22.15. Если слово LOCAL не определено, сервер пытается самостоятельно найти заданный файл, руководствуясь следующими правилами. Х Если имя file_name задано как абсолютный путь, сервер ищет файл, начиная с корневого каталога. Х Если имя file_name задано как относительный путь, его интерпретация зависит от того, содержит это имя один или больше компонентов. Если определен только один компонент, сервер ищет файл в каталоге установленной по умолчанию базы данных. Если же заданное имя содержит несколько компонентов, сервер ищет файл, начиная с каталога данных сервера. Х При определении ключевого слова LOCAL заданное имя файла интерпретируется следующим образом. Х Если имя fllejname задано как абсолютный путь, программаклиент ищет файл, начиная с корневого каталога. Х Если имя filejiame задано как относительный путь, программаклиент ищет файл, начиная с текущего каталога пользователя. В зависимости от использования ключевых слов IGNORE и REPLACE, строки с дублирующими значениями уникальных индексов либо пропускаются, либо вставляются вместо существующих. Если ни одно, ни второе слово не определено, а такая запись встречается, возникает ошибка, и все оставшиеся строки пропускаются.

Приложение Г. Синтаксис SQL Предложение import_options определяет формат данных. Задаваемые в нем опции могут также использоваться и в предложении export_options оператора SELECT... INTO OUTFILE. Предложение import^options имеет следующий синтаксис:

[FIELDS [TERMINATED BY 'string'] [OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char']] [LINES TERMINATED BY 'string'] Для представления специальных символов в значениях string и values могут применяться следующие последовательности. Последовательность \0 \b \п \г \s \t V V \\ Значение ASCII-символ О Backspace Новая строка Возврат каретки Пробел Табуляция Одинарная кавычка Двойные кавычки Обратная косая черта (\) В MySQL версии 3.22.10 и более поздних версиях для определения комбинаций символов можно также использовать шестнадцатеричные константы. Предложение LINES TERMINATED BY 0x02, например, определяет, что строки разрываются при нажатии комбинации клавиш (ASCII 2). Если задано ключевое слово FIELDS, необходимо определить по крайней мере одно из предложений TERMINATED BY, ENCLOSED BY или ESCAPED BY, причем в установленном порядке. Если заданы оба слова, FIELDS и LINES, опции FIELDS должны задаваться первыми. Предложение FIELDS включает следующие части. Предложение TERMINATED BY определяет символ или символы, которые ограничивают значения внутри строки. Х Предложение ENCLOSED BY определяет символ кавычек, который ограничивает значения поля. Оно может задаваться как с ключевым словом OPTIONALLY, так и без него. Для операторов вывода (SELECT... INTO OUTFILE) определенный в предложении ENCLOSED BY символ используется для выделения значений поля в выводимой строке. Если задано ключевое слово OPTIONALLY, знаХ Часть IV. Приложения чения выделяются определенными символами только для столбцов ТИПа CHAR И VARCHAR. Чтобы включить определенный предложением ENCLOSED BY символ в значение поля, его необходимо либо продублировать, либо установить после символа ESCAPED BY. В любом другом случае он будет рассматриваться как знак конца поля. Для включения такого символа в значения поля выводимых строк первым устанавливается символ, определенный предложением ESCAPED BY. Х Заданный в предложении ESCAPED BY символ используется для определения того, что следующий за ним символ является специальным. Так, в предыдущих примерах в качестве символа выхода выступает обратная косая черта ("\"). Следовательно, в вводимой информации "\N" (обратная косая черта и N) интерпретируется как NULL, а "\0" (обратная косая черта и ASCII-символ "О") Ч как нулевой байт. Для всех остальных случаев символ выхода отбрасывается, а следующий за ним символ помещается в строку. Например, запись "\ м " интерпретируется как символ двойной кавычки, даже если предыдущим предложением ENCLOSED BY определено, что двойные кавычки указывают на конец строки. Х В выводимой информации символ выхода используется для кодирования NULL и нулевых байтов с помощью записей "\м" и "\0" соответственно. Кроме того, чтобы ввести в строке символы, определенные предложениями ESCAPED BY и ENCLOSED BY в качестве символов выхода и окончания строки, необходимо установить перед ними еще Ьдин символ выхода. Если символ ESCAPED BY пуст (ESCAPED BY ), подобная обработка не выполняется. Чтобы ввести символ выхода "\", введите его дважды (ESCAPED BY \\) Итак, значение предложения LINES TERMINATED BY определяет символ или символы, указывающие на окончание строк. Если предложения FIELDS и LINES не определены, используются установленные по умолчанию значения. С помощью операторов их можно было бы задать следующим образом:

FIELDS TERMINATED BY '\\t' ENCLOSED BY '' ESCAPED BY '\V LINES TERMINATED BY 'n' Другими словами, поля в строке не выделяются кавычками, обратная косая черта рассматривается как символ выхода, а строки обрываются после ввода символов перехода на новую строку. Если значения TERMINATED BY и ENCLOSED BY предложения FIELDS являются пустыми (не заполненными), используется формат строки фиксированной ширины, в которой поля не отделяются друг от друга специальными разделителями. В этом случае значения столбцов считываются Приложение Г. Синтаксис SQL (или записываются при выводе) на основании определенной ширины столбца. Так, например, столбцы значений VARCHAR(15) и MEDIUMINT (5) считываются соответственно как 15-символьные и 5-символьные поля. Значения NULL записываются как строки пробелов. Если задается предложение IGNORE л LINES, первые п строк ввода пропускаются. Например, если файл данных содержит строку с заголовками столбцов, которую вставлять в таблице базы данных вовсе необязательно, можно добавить предложение IGNORE l LINES:

LOAD DATA LOCAL INFILE "my_tbl.txt" INTO TABLE my_tbl IGNORE 1 LINES Если список column_list не определен, предполагается, что строки ввода содержат по одному значению для каждого столбца таблицы. Если же в этом списке содержится одно или несколько разделенных запятыми имен столбцов, строки ввода должны включать значения для всех перечисленных столбцов. Столбцам, которые не указаны в списке, присваиваются значения по умолчанию. Если же в строке ввода указано меньше значений, чем имен столбцов в списке column_list, неопределенным столбцам присваиваются значения по умолчанию. При обработке файла с отформатированным текстом, созданным на компьютере с Windows, можно использовать установленный по умолчанию разделитель столбца. Следует учитывать, что строки в таком тексте наверняка разрываются с помощью пары "возврат каретки/переход на новую строку". Для загрузки такого файла определите новый ограничитель строки ("\г" отражает символ возврата каретки, а "\п" Ч переход на новую строку):

LOAD DATA LOCAL INFILE "my_tbl.txt" INTO TABLE my_tbl LINES TERMINATED BY "\r\n" К сожалению, обработка созданных под управлением Windows файлов может закончиться записью ошибочной информации в базу данных, если создавшая этот файл программа использует устаревшее правило помещать в конце файла символ . Вам придется либо записать файл с помощью более современной программы, либо удалить ошибочную запись после загрузки файла. В некоторых файлах значения разделены между собой запятыми, а поля заключены в двойные кавычки. Если предположить, что в конце строк такого файла размещаются символы перехода на новую строку, то оператор LOAD DATA для считывания такого файла должен выглядеть следующим образом:

LOAD DATA LOCAL INFILE "my_tbl.txt" INTO TABLE my_tbl FIELDS TERMINATED BY "," ENCLOSED BY "\"" Приведенный ниже оператор позволяет считать файл, в котором поля разделены символами (ASCII 1), а строки заканчиваются символом (ASCII 2).

LOAD DATA LOCAL INFILE "my_tbl.txt" INTO TABLE my_tbl FIELDS TERMINATED BY 0x01 LINES TERMINATED BY 0x Часть IV. Приложения LOCK TABLES LOCK TABLES lock_list Устанавливает блокировку на таблицы, перечисленные в списке lockjist, не завершая свою работу, если необходимо, до тех пор, пока не установятся все блокировки. Синонимом этого оператора выступает оператор LOCK TABLE. Список lock_list может состоять из одного или нескольких разделенных элементов, каждый из которых должен иметь следующий синтаксис: tbl_name [AS alias_name] {READ | [LOW_PRIORITY] WRITE} Ключевое слово READ указывает на блокировку с правами чтения. Этот вид блокировки позволяет клиентам считать данные таблицы, но запрещает выполнять запись. Ключевое слово WRITE отражает полную блокировку. Если заданы ключевые слова LOW_PRIORITY WRITE, блокировка не устанавливается до тех пор, пока все клиенты не перестанут считывать данные таблицы. Если в момент запуска оператора с таким видом блокировки кто-то из клиентов считывает данные таблицы, то и остальные смогут к ней обратиться. Только по завершении считывания всех пользователей оператор будет выполнен. Оператор LOCK TABLES позволяет определить также и псевдоним для блокируемой таблицы, чтобы впоследствии использовать его в запросах. Если обращение к таблице в запросе выполняется несколько раз, необходимо заблокировать каждый образец таблицы. При выполнении оператора LOCK TABLES снимаются также все имеющиеся в настоящее время блокировки. Следовательно, чтобы заблокировать несколько таблиц, необходимо все их указать в одном операторе LOCK TABLES. Все установленные клиентом блокировки автоматически снимаются при завершении сеанса его работы. Блокировки с ключевым словом LOW_PRIORITY впервые появились в MySQL версии 3.22.5.

LOCK TABLES student READ, score WRITE, event READ LOCK TABLE member READ OPTIMIZE TABLE OPTIMIZE TABLE tbljiame Освобождает неиспользуемое свободное пространство таблицы. Результатом появления такого неиспользуемого пространства может быть выполнение операторов DELETE, REPLACE и UPDATE, особенно для таблиц со строками переменной длины. Оператор OPTIMIZE TABLE исключает неиспользуемое пространство, благодаря чему размеры таблицы становятся меньше. В версиях MySQL серии 3.23 планируется добавить дополнительные опции поддержки таблиц, поэтому рекомендуется для получения более детальной информации ознакомиться с материалом справочного руководства по MySQL. Приложение Г. Синтаксис SQL REPLACE REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [ (columnjist) ] VALUES (expr {, expr] REPLACE [LOW_PRIORITY | DELAYED] [INTO]...) [, (... ) ]...

tbl_name ((columnjist) ] SELECT... REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expr [, co/_name=expr]...

Оператор REPLACE аналогичен оператору INSERT с той лишь разницей, что при вставке строки с дублирующим значением для индекса UNIQUE одной из уже существующих строк таблицы, старое значение удаляется перед вставкой нового. Именно поэтому в синтаксисе оператора REPLACE отсутствует ключевое слово IGNORE. Более детально об элементах этого оператора рассказывается в описании оператора INSERT. REVOKE REVOKE priv_type [(columnjist)] [, priv_type [(columnjist)]...] ON { *. * | * | db_name.tbl_name \ tbljname} FROM user [, user]... Оператор REVOKE лишает пользователя (или пользователей) указанных привилегий. Предложения priv_type, columnjist и user определяются так же, как и в операторе GRANT. Те же спецификаторы можно использовать и в предложении ON. В процессе выполнения оператор REVOKE не удаляет пользователя из таблицы разрешений. Это означает, что пользователь все еще сможет подключиться к серверу MySQL. Чтобы полностью запретить пользователю подключение, необходимо вручную удалить его запись из таблицы разрешений. Оператор REVOKE впервые появился в MySQL версии 3.22.11. Рассмотрим несколько примеров. Чтобы лишить пользователя superduper@localhost всех привилегий, выполните следующий оператор:

REVOKE ALL ON *.* FROM superduper@localhost Теперь давайте удалим привилегии, которые давали возможность пользователю member_mgr изменять таблицу member базы данных samp_db:

REVOKE INSERT,DELETE,UPDATE ON samp_db.member FROM member_mgr@boa.snake.net И наконец, для удаления всех привилегий доступа к единственной таблице базы данных menagerie со стороны анонимного пользователя локального компьютера можно воспользоваться следующим оператором:

REVOKE ALL ON menagerie.pet FROM ""Olocalhost Часть IV. Приложения ELECT ELECT lselect_options) select_list [FROM tbl_list [INTO OUTFILE file_name export_option] [WHERE where_expr] [GROUP BY column_list] [HAVING where_expr] [ORDER BY (unsigned_integer \ col_name \ formula} [ASC | DESC],... ] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ] Делает выборку строк из определенных таблиц. Практически все элементы синтаксиса этого оператора, за исключением ключевого слова SELECT и предложения select_list, являются необязательными, что позволяет использовать этот оператор для расчета выражений: SELECT "one plus one", 1+1 Предложение select_pptions может содержать следующие опции. Х ALL;

DISTINCT;

DISTINCTROW. Эти ключевые слова определяют, будут ли возвращаться строки с дублирующими значениями. Слово ALL приводит к возврату всех строк и используется по умолчанию. Ключевые слова DISTINCT и DISTINCTROW определяют, что дублирующие строки исключаются из результирующего набора. Х HIGH_PRIORITY. Добавление ключевого слова HIGH_PRIORITY дает оператору больший приоритет. Если другие операторы, такие, например, как INSERT или UPDATE, ожидают перед записью в определенную оператором SELECT таблицу, пока пользователи не перестанут считывать данные таблицы, то слово HIGH_PRIORITY позволяет оператору SELECT получить более высокий по сравнению с ними приоритет. Это ключевое слово следует использовать только для операторов SELECT, которые исполняются быстро и должны быть выполнены немедленно, поскольку выполнение операторов записи или обновления значительно замедлится. Ключевое слово HIGH_PRIORITY впервые появилось в MySQL версии 3.22.9. Х SQL_BIG_RESULT;

SQL_SMALL_RESULT. Эти ключевые слова определяют, что результирующий набор будет большим или, наоборот, малым, что позволяет средству оптимизации более эффективно обработать запрос. Ключевое слово SQL_SMALL_RESULT впервые появилось в MySQL версии 3.22.12, a SQL_BIG_ RESULT - MySQL 3.23. Х STRAIGHTJOIN. Заставляет таблицы объединяться в порядке, определенном в предложении FROM. Это ключевое слово могут зада Приложение Г. Синтаксис SQL вать пользователи в том случае, если, на их взгляд, средство оптимизации самостоятельно не осуществит лучший выбор. В предложении select_list определяются имена возвращаемых столбцов, разделенных запятыми. Эти столбцы могут быть ссылками на столбцы таблицы или выражения. Каждому такому столбцу можно присвоить псевдоним, используя синтаксис AS aliasjiame. Этот псевдоним впоследствии становится именем столбца в выводимых данных и может использоваться для ссылки в предложениях GROUP BY, ORDER BY и HAVING. Нельзя использовать этот псевдоним в предложении WHERE. Специальный символ "*" означает "все столбцы из таблицы, указанной в предложении FROM", а запись tbljiame* Ч "все столбцы из таблицы tbljwme". Результат выполнения оператора SELECT можно с помощью предложения INTO file_name OUTFILE записать в файл file_name. Для этого необходимо обладать привилегиями FILE, а файл с таким именем существовать не должен. Имя файла интерпретируется таким же образом, как при считывании нелокальных файлов оператором LOAD DATA. Синтаксис предложения export'^options аналогичен синтаксису предложения import_options для оператора LOAD DATA. В предложении FROM приводятся имена одной или нескольких таблиц, из которых извлекаются строки. MySQL поддерживает следующие типы объединения JOIN в операторах SELECT:

tbl_list tbl_name tbl_list, tbl_name tbl_list [CROSS] JOIN tbl_name tbl_last INNER JOIN tbl_name ' tbl_list STRAIGHT_JOIN tbl_name tbj_list LEFT [OUTER] JOIN tbl_name ON conditionsl_expr tbl_list LEFT [OUTER] JOIN tbi_name USING (column_list) tbl_list NATURAL LEFT [OUTER] JOIN tblname { oj tbl_list LEFT OUTER JOIN tbl_name ON conditional_expr } Типы соединения помогают извлекать строки из названных таблиц, как отражено в представленных описаниях. Хотя реально возвращаемые строки могут еще ограничиваться предложениями WHERE, HAVING или LIMIT. Если в операторе SELECT указана одна таблица, сервер извлекает строки из нее. Если же через запятую определены имена сразу нескольких таблиц, оператор SELECT возвращает все возможные комбинации строк из них. В качестве альтернатив запятым могут выступать ключевые слова JOIN, CROSS JOIN ИЛИ INNER JOIN. Подобную ФУНКЦИЮ ВЫПОЛНЯСТ И СЛОВО STRAIGHT_JOIN, однако оно заставляет средство оптимизации объединять таблицы в порядке их перечисления. Как уже отмечалось ранее, эту особенность можно применять в случаях, когда, по мнению пользователя, средство оптимизации не сделает наилучший выбор.

Часть IV. Приложения Ключевое слово LEFT JOIN также приводит к выборке строк из свяанных таблиц, однако сопровождается генерированием строки для кажэй строки левой таблицы, даже если в правой таблице соответствующие ей записи отсутствуют. Когда такие записи отсутствуют, столбцы с правей таблицы возвращаются со значениями NULL. Выборка строк осуществляется в соответствии с условиями, определенными в предложениях ON conditional_expr или USING (columnJist). Форма выражения conditional_expr мфжет использоваться и в предложении WHERE. Список columnJist может содержать как одно имя столбца, так и несколько разделенных запятыми имен. Каждое определенное имя указывает на столбец, который есть во всех объединенных таблицах. Предложение LEFT OUTER JOIN аналогично предложению LEFT JOIN. To же можно сказать и о синтаксисе, начинающемся со слова oj (который добавлен для совместимости с ODBC). Предложение NATURAL LEFT JOIN является аналогом предложения LEFT JOIN USING (columnJist), где список columnjiame содержит имена столбцов, входящих во все указанные таблицы. Используя синтаксис tbl_name aliasjwme или tbljwme AS alias_name, таблицам можно присваивать псевдонимы в предложении FROM. Впоследствии ссылки на такие столбцы в операторе SELECT необходимо выполнять только с помощью псевдонимов. Предложение WHERE определяет выражение, которое применяется к извлеченным из таблиц (заданных в предложении FROM) строкам. Все строки, не удовлетворяющие заданному критерию, отвергаются. Впоследствии результирующий набор можно еще больше ограничить предложениями HAVING И LIMIT. Предложение GROUP BY columnJist группирует строки результирующего набора в соответствии с перечисленными в списке столбцами. Это предложение особенно полезно при определении таких функций, как COUNT () или МАХ () в предложении selectJist. Ссылаться на эти столбцы можно либо по имени, либо по псевдонимам, либо по позиции внутри списка select Jist. Позиции столбцов нумеруются, начиная с 1. Предложение HAVING задает второе выражение, которое ограничивает результирующий набор после проверки на условия предложения WHERE. Строки, не соответствующие условиям предложения HAVING, также отбрасываются. Предложение HAVING эффективно используется в выражениях с агрегатными функциями, которые нельзя проверить с помощью предложения WHERE. Однако если какое-либо условие можно задать как в предложении WHERE, так и в предложении HAVING, лучше разместить его в первом. В этом случае условие будет проанализировано средством оптимизации. Предложение ORDER BY определяет порядок сортировки результирующего набора. Так же, как и в предложении GROUP BY, ссылаться на столбцы можно с помощью имени, псевдонима или позиции внутри списка столбцов. Выводимые столбцы по умолчанию сортируются в возрастающем порядке. Чтобы самостоятельно определить порядок сортировки Приложение Г. Синтаксис SQL столбцов, укажите ключевое слово АЗС (восходящая) или DES (нисходящая). В MySQL 3.23.2 можно также в качестве столбца сорта ровки определить выражение. Так, например, предложение ORDER BY RAND () приводит к сортировке строк случайным образом. Для выбора определенных строк из результирующего набора использовать предложение LIMIT. Так, определение LIMIT n приводит,к возврату первых п строк. Предложение LIMIT n, т возвращает л строк, начиная со строки т. Расчет строк начинается с нуля, а не с единицы. После ключевого слова PROCEDURE указывается имя процедуры, которой будут посланы данные результирующего набора перед возвратом его клиенту. В версиях MySQL серии 3.23 предложение PROCEDURE ANALYSE () можно применять для получения информации о характеристиках данных столбцов, перечисленных в списке столбцов. Ниже представлены примеры использования оператора SELECT. Множество полезных примеров можно найти также в главе 1, "Знакомство с СУБД MySQL и SQL". Выборка всего содержимого таблицы:

SELECT * FROM president Выборка всего содержимого таблицы и сортировка по имени и фамилии:

v SELECT * FROM president ORDER BY last_name, first_name Выборка записей для всех президентов, рожденных в день "1900-01-01" или позже:

SELECT * FROM president WHERE birth >= "1900-01-01" To же самое, однако с сортировкой по датам рождения:

SELECT * FROM president WHERE birth >="1990-01-01" ORDER BY birth Определение штатов, перечисленных в строках таблицы member:

SELECT DISTINCT state FROM member;

Выборка строк из таблицы member и запись столбцов в виде разделенных запятыми значений в файл:

SELECT * INTO OOTFILE "/tmp/member.txt" FIELDS TERMINATED BY "," FROM member Выборка первых пяти результатов для определенного события:

SELECT * FROM score WHERE event_id = 9 ORDER BY score DESC LIMIT SET SET [OPTION] option_setting,... Оператор SET используется для определения большого количества опций. Рекомендуется избегать ключевого слова OPTION, поскольку в будущих версиях MySQL планируется его убрать. \ Часть IV. Приложения В качестве значений option_setting может выступать любой элемент из [тедующего списка. CHARACTER SET {charset_name \ DEFAULT}. Определяет используемый клиентом набор символов. С учетом этого набора символов впоследствии обрабатываются все строки, принятые от клиента и переданные ему. В настоящее время доступен только набор cp!251_koi8. Использование имени набора DEFAULT приводит к восстановлению набора по умолчанию. SET CHARACTER SET cp!251_koi8 SET CHARACTER SET DEFAULT Х INSERT_ID = п. Определяет значение, используемое следующим оператором INSERT при вставке столбца AUTO_INCREMENT, Эта опция используется при обработке журнала обновлений. SET INSERT_ID = 1973 LAST_INSERT_ID = п. Определяет значение, возвращаемое функцией LAST_INSERT_ID (). Эта опция используется при обработке журнала обновлений. SET LAST_INSERT_ID = 48731 PASSWORD [FOR user] = PASSWORD("password"). Если предложение FOR отсутствует, оператор SET с этой опцией устанавливает пароль "password" для текущего пользователя. Добавление предложения FOR позволяет задать пароль для определенного пользователя user. Задающий новый пароль пользователь должен обладать достаточными полномочиями для доступа к базе данных mysql. Пользователь user определяется в форме user_name@host_name. Значения user_name и host_name должны быть такого же типа, как и для оператора GRANT. SET PASSWORD = P A S S W O R D ( " s e c r e t " ) SET PASSWORD FOR paul = PASSWORD("secret") SET PASSWORD FOR paul@localhost = PASSWORD("secret") SET PASSWORD FOR bill@%.bigcorp.com = PASSWORD("old-sneep") SQLAUTO_IS_NULL = (0 | 1}. Если эта опция имеет значение 1, последняя строка, вставленная со значением AUTO_INCREMENT, может быть извлечена с помощью предложения WHERE, заданного в форме WHERE auto_inc_col IS NULL. Такая возможность используется некоторыми ODBC-программами, например Access. Этот параметр впервые появился в MySQL 3.23.5 и по умолчанию имеет значение 1. SET SQL_AUTO_IS_NULL = 0 SQL_BIG_SELECTS = {0 | 1}. Если эта опция имеет значение 1, оператор SELECT будет возвращать больше строк, чем разрешено Х Х Х Х Приложение Г. Синтаксис SQL параметром max_join_size. Во всех остальных случаях запрось по достижении этого значения будут завершать свою работу. умолчанию эта опция имеет значение 1. SET SQL_BIG_SELECTS = 0 Х SQL_BIG_TABLES = {0 | 1}. Если эта опция имеет значение все временные таблицы сохраняются на диске, а не в памяти. Это, конечно, отражается на производительности работы, однако операторы SELECT, создающие большие временные таблицы, в процессе выполнения не выводят ошибки о переполнении таблиц. По умолчанию эта опция имеет значение 0 (т.е. временные таблицы хранятся в памяти). В MySQL версии 3.23 и выше эта опция по сути не нужна. SET SQL_BIG_TABLES = 1 SQL_LOG_OFF = {О I 1}. Если эта опция имеет значение 1, запросы текущего клиента не регистрируются в общем журнале. Установка значения 0 приводит к активизации регистрации. Чтобы изменить значения этого параметра, клиент должен обладать привилегией PROCESS. Изменить регистрацию в журнале обновлений с его помощью нельзя. SET SQL_LOG_OFF = 1 SQL_LOG_UPDATE = {О | 1}. Эта опция аналогичная опции SQLLOG_OFF (включая требования к наличию привилегий PROCESS), однако воздействует на регистрацию в журнале обновлений, а не общем журнале. Опция SQL_LOG_UPDATE впервые появилась в MySQL 3.22.5. SET SQL_LOG_UPDATE = 1 SQL_LOW_PRIORITY_UPDATES = {0 | 1}. ЕСЛИ Эта ОПЦИЯ ИМееТ значение 1, операторы изменения содержимого таблицы (DELETE, INSERT, REPLACE и UPDATE) не приступают к работе до тех пор, пока остальные пользователи не завершат выборку записей из таблиц. Вновь "прибывающие" операторы SELECT начинают исполняться немедленно, не ожидая выполнения операторов изменения, обладающих более низким приоритетом. Опция SQL_LOW_PRORITY_UPDATES впервые появилась в MySQL 3.22.5. SET SQL_LOW_PRIORITY_UPDATES = О Х SQL_SELECT_LIMIT = {n | DEFAULT }. Определяет максимальное число записей, возвращаемых оператором SELECT. Если в операторе это значение явным образом задается предложением LIMIT, то установка в этом предложении имеет больший приоритет по сравнению с этой опцией. По умолчанию устанавливается значение "без ограничений". Определение ключевого слова DEFAULT привоЧасть IV. Приложения Х Х Х дит к восстановлению значения по умолчанию, если ранее оно было изменено. SET SQL_SELECT_LIMIT = 100000 SET SQL_SELECT_LIMIT = DEFAULT Х SQL_WARNINGS = {0 | 1}. Если эта опция имеет значение 1, MySQL выдает предупреждение даже для однострочных вставок. Опция SQL_WARNINGS впервые появилась в MySQL 3.22.11 и по умолчанию имеет значение 0. SET SQL_WARNINGS = 1 Х TIMESTAMP = {timestamp_value | DEFAULT}. Определяет значение TIMESTAMP, которое используется при обработке журнала обновлений. SET TIMESTAMP = DEFAULT SHOW SHOW COLUMNS FROM tbljiame [FROM dbjiame} [LIKE pattern} SHOW DATABASES [LIKE pattern} SHOW GRANTS FOR userjiame SHOW INDEX FROM tbljiame [FROM dbjiame} SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS [FROM db_name} [LIKE pattern} SHOW TABLES [FROM dbjiame} [LIKE pattern} SHOW VARIABLES [LIKE pattern} Различные формы оператора SHOW выводят всевозможную информацию о базах данных, таблицах, столбцах, индексах и общем функционировании сервера. Некоторые его формы включают предложение FROM dbjiame, позволяющее определить имя интересующей базы данных. Если это предложение не приводится, для извлечения информации используется база данных по умолчанию. Некоторые формы содержат также необязательное предложение LIKE pattern, что позволяет с помощью условий ограничить выводимые значения. Задаваемый образец должен быть строкой или SQL-образцом с символами "%" или "_".

SHOW COLUMNS Оператор SHOW COLUMNS выводит список столбцов в данной таблице. Его синонимом является оператор SHOW FIELDS. SHOW COLUMNS FROM presid/nt SHOW FIELDS FROM president SHOW COLUMNS FROM president FROM samp_db SHOW COLUMNS FROM tables_priv FROM mysql LIKE "%priv" Выводимые оператором SHOW COLUMNS данные включают следующие столбцы. Приложение Г. Синтаксис SQL Х Field. Имя столбца таблицы. Х Туре. Тип столбца. Х Null. Показывает, может ли столбец содержать значения NULL. Может иметь значение YES (да) или пустое значение (нет). Х Key. Показывает, является ли столбец индексируемым. Х Default. Значение по умолчанию столбца. Х Extra. Дополнительная информация о столбце. Х Privileges. Привилегии, выделенные для столбца. Эта информация указывается только в версиях MySQL 3.23 и выше.

SHOW DATABASES Оператор SHOW DATABASES выводит список баз данных, доступных на компьютере сервера. SHOW DATABASES SHOW DATABASES LIKE "test%" SHOW GRANTS Оператор SHOW GRANTS отображает информацию о привилегиях, предоставленных определенному пользователю. Для задания пользователя применяется формат user_name&host_name, где значения userjiame и host_name соответствуют задаваемым для оператора GRANT. Оператор SHOW GRANTS впервые появился в MySQL версии 3.23.4. SHOW GRANTS FOR root@localhost SHOW GRANTS FOR " " @ p i t - v i p e r. s n a k e. n e t SHOW INDEX Оператор SHOW INDEX отображает информацию об индексах таблицы. Его аналогом является оператор SHOW KEYS. SHOW INDEX FROM score SHOW KEYS FROM score SHOW INDEX FROM sampdb. score SHOW INDEX FROM score FROM samp_db Выводимый результат этого оператора содержит следующие столбцы. Х Table. Имя таблицы, содержащей индексы. Х Non_unique. Этот столбец имеет значение 1, если индекс может содержать дублирующие значения, и 0, если это не допускается. Х Key_name. Имя индекса. Seq_in_index. Число столбцов внутри индекса, которые нумеруются, начиная с 1. Х Column name. Имя столбца. 660 Часть IV. Приложения Х Х Collation. Порядок сортировки столбцов внутри индекса. Возможными значениями этого столбца могут быть А (восходящая сортировка), D (нисходящая сортировка) или NULL (столбцы не отсортированы). Нисходящие ключи еще пока недоступны, но их планируется ввестк в будущем. Х Cardinality. Количество уникальных значений в индексе. Значение этого параметра обновляется посредством запуска утилит myisamchk И isamchk с опцией --analyze. Х Sub_part. Длина префикса, если только индексируется префикс столбца. Этот параметр имеет значение NULL, если индексируется целый столбец. Х Packed. Способ пакетирования ключа (NULL, если ключ не пакетируется). Этот столбец имеется только в MySQL серии 3.23 и выше. Х Comment. Зарезервировано для внутренних комментариев об индексе. Этот столбец имеется только в MySQL серии 3.23 и выше. SHOW PROCESSLIST Оператор SHOW PROCESSLIST отображает информацию о выполняемых внутри сервера потоках. Его вывод содержит следующие столбцы. Х Х Х Х Х Х Id. ID-номер потока для клиента. User. Имя клиента, связанное с потоком. Host. Компьютер, с которого подключается клиент. db. База данных по умолчанию для клиента. Command. Команда, исполняемая потоком. Time. Количество времени, в течение которого команда выполняется в потоке (в секундах). Х state. Информация об операциях, которые MySQL выполняет в процессе обработки оператора SQL. Значение этого столбца может оказаться полезным при выяснении проблем в работе MySQL или для вопросов для списка рассылки. Х Info. Исполляемый запрос. SHOW STATUS Оператор SHOW STATUS выводит на экран значения переменных состояния сервера. Х Aborted_clients. Число клиентских соединений, прерванных в результате неправильного закрытия соединения клиентом. Х Aborted_connects. Число неудачных попыток подключения к серверу. Приложение Г. Синтаксис SQL. Connections. Число общих попыток подключения к серверу (удачных и неудачных). Если это значение достаточно высоко, возможно, есть смысл просмотреть наиболее продолжительные соединения. Created_tmp_tables. Число временных таблиц, созданных в процессе обработки запроса. Delayed_errors. Число ошибок, возникших в процессе обработки строк INSERT DELAYED. Delayed_insert_threads. Текущее число обрабатываемых запросов INSERT DELAYED. Delayed_writes. Число записанных с помощью оператора INSERT DELAYED строк. Flush_commands. Число выполненных команд FLUSH. Handler_delete. Число запросов на удаление строки из таблицы. Handler_read_first. Число запросов на чтение первой строки таблицы. Handler_read_key. Число запросов на чтение строк, построенных на значении индекса. Handler_read_next. Число запросов на чтение следующей строки в порядке индексов. Handler_read_rnd. Число запросов на чтение строки, основанных на ее позиции. Если это значение превышает сумму значений всех предыдущих параметров, следовательно, выполняется большое число запросов, требующих полного сканирования таблицы или неправильно использующих индексы. Handler_update. Число запросов на обновление строк таблицы. Handler_write. Число запросов на вставку строк в таблицу. Key_block_used. Число используемых в кэше индексов блоков. Key_read_requests. Число запросов на чтение блока из кэша индексов. Key_reads. Число физических операций чтения блоков индексов с диска. Key_write_requests. Число запросов на запись блока в кэш индексов. Key_writes. Число физических операций записи блоков индексов на диск. Max_used_connections. Максимальное число соединений, которые были открыты одновременно.

Часть IV. Приложения Х Not_flushed_delayed_rows. Число строк, ожидающих вставки в запросах INSERT DELAYED. Х Not_f lushed_key_blocks. Число блоков в кэше ключей, которые были изменены, но еще не записаны на диск. Х Open_f lies. Число открытых файлов. Х Open_streams. Число открытых потоков. Потоком называется файл, открытый с помощью функции f open () (применяется только к файлам журналов). Х Open_tables. Число открытых таблиц. Х Opened_tables. Общее число таблиц, которые были открыты. При большом значении этого параметра рекомендуется увеличить размер кэша таблиц. Х Questions. Число полученных сервером запросов (как успешно обработанных, так и отвергнутых). Х Slow_queries. Число запросов, которые будут обрабатываться дольше, чем long_query_time секунд. Х Threads_connected. Число открытых текущих соединений. Х Threads_running. Число процессов, находящихся в активном состоянии. Х Uptime. Время работы сервера в секундах.

SHOW TABLE STATUS Оператор SHOW TABLE STATUS выводит описательную информацию о таблицах базы данных. Этот оператор впервые появился в MySQL версии 3.23. SHOW TABLE STATUS SHOW TABLE STATUS FROM samp_db SHOW TABLE STATUS FROM mysql LIKE %priv"" Выводимые данные оператора SHOW TABLE STATUS содержат следующие столбцы. Х Name. Имя таблицы. Х Туре. Тип таблицы. Возможными значениями этого столбца могут быть NISAM (ISAM), MylSAM ИЛИ HEAP. Х Row_format. Формат хранения строки. Возможными значениями этого столбца могут быть Fixed (строки фиксированной длины), Dynamic (строки переменной длины) или Compressed. Х Rows. Число строк в таблице. Х Avg_row_length. Среднее число байт, занимаемых строками таблицы. 1риложение Г. Синтаксис SQL Х Data_length. Реальный размер файла данных таблиц в байтах.

Х Max_data_length. Максимальный размер (в байтах), до которого может увеличиваться файл данных таблицы. Х Х Index_length. Реальный размер файла индекса в байтах. Data_f гее. Число неиспользуемых байт файла данных. Если этот столбец имеет очень большое значение, рекомендуется запустить для таблицы оператор OPTIMIZE TABLE.

Х Auto_increment. Следующее значение, которое будет сгенерировано ДЛЯ СТОЛбца AUTO_INCREMENT. Х Create_time. Время создания таблицы. Х Update_time. Время последнего изменения таблицы. Х Check time. Время последней проверки и отладки таблицы с помощью утилиты myisamchk. Если таблица никогда не проверялась или исправлялась, этот столбец имеет значение NULL. Createoptions. Дополнительные опции, определенные в предложении table_options оператора CREATE TABLE при создании таблицы. Comment. Текст всех определенных в момент создания комментариев.

Х Х SHOW TABLES Оператор SHOW TABLES выводит список таблиц базы данных. SHOW TABLES SHOW TABLES FROM samp_db SHOW TABLES FROM mysql LIKE "%priv" SHOW VARIABLES Оператор SHOW VARIABLES выводит список переменных сервера и их значения. Все эти переменные описаны в разделе приложения Д, "Программы MySQL", посвященного переменным сервера mysqld. SHOW VARIABLES SHOW VARIABLES LIKE "%thread%" UNLOCK TABLES UNLOCK TABLES Этот оператор снимает со всех таблиц блокировки, установленные текущим клиентом. Его аналогом является оператор UNLOCK TABLE.

Часть IV. Приложения UPDATE UPDATE [LOW_PRIORITY] tbl_name SET col_name=expr [, col_name=expr [WHERE where_expr] [LIMIT n] ]...

Изменяет содержимое строк таблицы tbl_name. Изменению подлежат строки, выделенные с помощью определенного в предложении WHERE выражения. В этих строках значение столбцов, перечисленных в предложении SET, устанавливается равным определенному выражению ехрг.

UPDATE member SET expiration =' NULL, phone = "197-602-4832" WHERE member_id = Если предложение WHERE не определено, изменяются все строки таблицы. По завершении выполнения оператор UPDATE возвращает число обновленных строк. Строка, однако, считается обновленной, если значение столбца действительно изменилось. Установка в столбце значения, аналогичного текущему, не приводит к изменению строки. Если пользователю действительно необходимо знать, сколько строк соответствовало определенным в предложении WHERE условиям, независимо от обновления строки оператором UPDATE, установите при подключении к серверу флаг CLIENT_FOUND_ROWS. Более детально об этом рассказывается в описании функции mysql_reai_connect () в приложении Е, "Программный интерфейс приложений С". При установке ключевого слова LOW_PRIORITY оператор не выполняется до тех лор, пока все клиенты не перестанут читать таблицу. Это ключевое слово впервые появилось в MySQL версии 3.22.5. Значение п предложения LIMIT определяет максимальное число строк, которые будут обновлены. Предложение LIMIT впервые появилось в MySQL версии 3.23.3.

USE USE с!Ь_лате Устанавливает базу данных dbjiame в качестве текущей (эта база данных по умолчанию выбирается для операторов, в которых имя обрабатываемой базы данных не указывается явным образом). Если такая база данных не существует или пользователь не имеет достаточно полномочий на доступ к ней, оператор USE останавливает свою работу. Синтаксис комментариев В этом разделе рассказывается, как писать комментарии в коде SQL, a также описываются особенности интерпретации комментариев клиентскими программами mysql. Комментарии довольно часто используются в Приложение Г. Синтаксис SQL файлах запросов, выполняемых в пакетном режиме, что следует учитывать при их написании. Сервер MySQL различает три вида комментариев. Х Строка, начинающаяся с символа "#", рассматривается как комментарий. Этот же синтаксис применяется в большинстве оболочек и в языке Perl. Х Выражение, заключенное между последовательностями "/*" и "*/", рассматривается как комментарий. Записанный в такой форме комментарий может занимать несколько строк и используется также в языке С. Х В версии MySQL 3.23.3 и более поздних комментарии можно начинать с символов "Ч " (два тире и пробел). При этом весь текст, расположенный между этими символами и концом строки, рассматривается как комментарий. Подобный стиль комментирования применяется в некоторых других системах управления базами данных, однако без пробела. В MySQL пробел необходим во избежание недоразумений в выражениях вида value l-value2, где value2 Ч отрицательное значение (в этом случае второе значение может рассматриваться как комментарий). При обработке запросов сервер пропускает комментарии. Исключение составляют лишь комментарии, которые начинаются символами "/* ! " и трактуются специальным образом. В этом случае текст должен содержать ключевые слова SQL, которые и будут восприниматься сервером как часть оператора, в котором расположены комментарии. Так, например, сервер одинаково воспримет следующие строки:

INSERT LOW_PRIORITY INTO my_tbl SET... INSERT /*! LOW_PRIORITY */ INTO my_tbl SET...

Эта форма комментария предназначается специально для определения расширений и ключевых слов MySQL. MySQL распознает заданные ключевые слова, а другие серверы SQL игнорируют их. Это упрощает написание запросов, которые позволяют воспользоваться расширенными возможностями MySQL и в то же время работают с другими СУБД. Стиль комментирования с символами "/* !" впервые появился в MySQL 3.22.7. В версии MySQL 3.22.26 и более поздних после символов " / * ! " можно указывать номер версии. Это укажет MySQL пропускать комментарии, если номер версии сервера меньше указанного. Представленные ниже комментарии к оператору UPDATE, например, будут проигнорированы, если только не используется сервер версии 3.23.3 или более поздней версии.

UPDATE my_table SET my_col = 100 WHERE my_col < 100 /*132303 LIMIT 100 */ Клиент MySQL обладает более ограниченными, чем сервер возможностями распознавания комментариев. Программа mysql может неправильно интерпретировать представленную в форме С-комментариев кон666 Часть IV. Приложения струкцию, поскольку использует менее совершенный, чем сервер синтаксический анализатор. Так, например, появившийся внутри такого комментария символ кавычек заставит эту программу полагать, что строку необходимо проанализировать. Соответственно, программа продолжит просматривать строку до конца, пытаясь найти второй символ кавычек. Это видно на примере следующего оператора.

mysql> SELECT /* I have no quote */ 1;

+ и I1I + I1 4h I h irysql> SELECT /* I've got a quote */ 1;

'> Первый оператор проанализирован программой mysql правильно и послан на сервер для выполнения, после чего снова появляется подсказка "mysql>". Второй оператор содержит комментарии с одним символом кавычек. В результате программа mysql входит в режим анализа строки и продолжает находиться в нем после запуска строки, что видно по подсказке ">". Чтобы выйти из этого режима, введите второй символ кавычки с последующей командой "/с" для отмены запроса. Более детальное описание предложений программы mysql представлено в приложении Д, "Программы MySQL".

Приложение Г. Синтаксис SQL д Программы MySQL Это приложение посвящено описанию перечисленных ниже программ MySQL. Далее в приложении каждая из указанных программ рассматривается более детально. В частности, описывается ее назначение, синтаксис вызова, поддерживаемые опции и используемые переменные. Х isamchk и myisamchk. Утилиты проверки и отладки таблиц, выполняющие также анализ распределения ключей, деактивизацию и активизацию индексов. myisampack и pack_isam. Утилиты создания сжатых, доступных только для чтения таблиц. mysql. Интерактивная программа, включающая средства редактирования строк и используемая для отправки запросов к серверу MySQL. Для исполнения запросов, записанных в файле, эта программа может работать в пакетном режиме. mysql.server. Сценарий запуска и завершения работы сервера MySQL. mysqlaccess. Сценарий проверки привилегий доступа. mysqladmin. Утилита, предназначенная для выполнения административных операций. Часть IV. Приложения Х Х Х Х т Х mysqlbug. Сценарий создания отчетов об ошибках. Х mysqld. Сервер MySQL. Эта программа обеспечивает клиентам доступ к управляемым базам данных. Х mysqldump. Утилита резервирования содержимого таблиц баз данных в текстовых файлах. Х mysqlimport. Утилита загрузки данных в таблицы из текстовых файлов. Х mysqlshow. Утилита, обеспечивающая сбор информации о базах данных и таблицах. Х safe_raysqld. Сценарий запуска и мониторинга функционирования сервера MySQL. В представленном далее описании синтаксиса необязательная информация заключается в квадратные скобки ([ ]). Определение программных опций С помощью опций пользователь имеет возможность влиять на функционирование большинства программ MySQL. Эти опции можно задавать в командной строке или конфигурационном файле. Кроме того, некоторые опции определяются посредством установки значений для переменных среды. Заданные в командной строке опции обладают большим приоритетом по сравнению с опциями, заданными другим способом Аналогичным образом, установки конфигурационных файлов имеют больший приоритет, чем значения переменных среды. Получение справочной информации о программах MySQL Практически все программы MySQL, за исключением mysqlbug, mysql. server и safe_mysqld, распознают опцию -help, которая дает возможность быстро получить справку о программе от самой программы Так, например, чтобы узнать, как работать с программой mysqlimport, вызовите ее следующим образом % mysqlimport Чhelp Опция -? аналогична опции help, хотя в некоторых оболочках символ "?" интерпретируется как специальный символ в имени файла:

% mysqlimport -?

mysqlimport: No match.* В этом случае можно попытаться запустить следующую команду:

% mysqlimport -\?

Большинство опций имеют как короткую (состоящую из одного символа), так и длинную (состоящую из полного слова) форму. Отличным примером являются два варианта опции справки:

-? и Чhelp. Если поПриложение Д. Программы MySQL еле представленной в короткой форме опции следует какое-либо значение, между значением и символами опции можно оставлять пустое пространство, однако можно его и удалить. Например, последовательности upaul и -u paul, определяющие имя пользователя, являются эквивалентными. Исключением из этого правила является лишь опция -р (пароль), значение пароля после которой должно задаваться без промежуточных пробелов. В описании каждой программы приводится список всех поддерживаемых опций. Если какая-либо описанная здесь опция не поддерживается программой, следовательно, используется устаревшая версия программы, которую необходимо обновить. (Однако сначала рекомендуется дважды внимательно проверить синтаксис опций.) Стандартные опции программы MySQL Некоторые опции имеют одинаковое значение во всех программах MySQL. Именно поэтому было принято решение описать все их вначале, а затем давать краткие рекомендации в разделах, посвященных стандартным поддерживаемым опциям. (В этом разделе описаны только длинные названия опций, хотя программы отлично понимают и их короткие формы, если нет отдельных замечаний об этом.) К стандартным опциям программ MySQL относятся следующие. Х -С, Чcompress. Активизирует средства сжатия протокола, используемого для взаимодействия между клиентом и сервером (если, конечно, протокол такие средства имеет). Эта опция используется только клиентскими программами. Она впервые появилась в MySQL 3.22.3. Х -# debug_options, Чdebuq=debug_options. Ахтивизирует вывод средств отладки. Эта опция приведет к желаемому эффекту только в том случае, если в MySQL добавлена и активизирована поддержка средств отладки. Разделенные запятой опции задаются в строке debugjoptions. Наиболее часто эта строка содержит значение d:t:ofile_name, которое активизирует отладку, включает элемент вызова функций и отслеживания выхода, а также отправляет выводимые данные в файл file_name. Пользователям, которые собираются серьезно заняться отладкой своих программ, рекомендуется прочитать файл dbug/dbug.c исходной дистрибуции MySQL. Этот файл содержит описание всех необходимых опций. Х Чdefaults-file=path_name. Определяет путь и имя конфигурационного файла. Обычно программы ищут этот файл в нескольких заранее определенных местах, однако если задана опция Чdefaultsfile, считывается только указанный в ней файл. Если эта опция зада Часть IV. Приложения Х Х Х Х Х Х Х Х ется, ее следует разместить первой в командной строке. Опция Ч defaults-file впервые появилась в MySQL 3.22.23. -?, Ч. Указывает программе вывести справочную информацию и завершить работу. -h host_name, Чhost=host_name. Определяет главный компьютер, с которым устанавливается соединение (и на котором запущен сервер). Эта опция используется только клиентскими программами. --no-defaults. Запрещает использовать любые конфигурационные файлы. Если эта опция задается, ее следует разместить первой в командной строке. -р [password], Чpas sword [ ^password]. Определяет пароль, используемый при подключении к серверу. Если после ключевого слова этой опции не определен пароль password, программа попросит пользователя ввести его. Задаваемый в командной строке пароль должен размещаться сразу за именем опции без промежуточных пробелов. Эта опция используется только клиентскими программами. -w, --pipe. Используется для подключения к серверу именованного канала. Эта опция используется только клиентскими программами, работающими под управлением ОС Windows. -Р port_num, --poxt=port_num. Клиентским программам эта опция указывает номер порта, который следует использовать при подключении к серверу. Такой порт применяется при установлении TCP/IP-соединений (соединений, в которых локальным компьютером не является localhost). Серверу mysqld эта опция сообщает номер порта, по которому следует ожидать запросы на установление соединения TCP/IP. Чprint-defaults. Выводит значения опций, которые используются при вызове программы, если в ее командной строке вовсе отсутствуют опции. В выводимый список входят значения, которые извлекаются из конфигурационных файлов (и значений переменных сред). Опция Чprint-defaults отлично подходит для проверки правильности настройки конфигурационного файла. Она также оказывается весьма кстати, если MySQL использует опции, которые сам пользователь никогда ранее не применял. Кроме того, с помощью опции Чprint-defaults можно проверять, из какого файла извлекаются опции. Если эта' опция задается, ее следует разместить первой в командной строке. -О var=value, Чset-variable var=value. В некоторых программах пользователь имеет возможность устанавливать значения переменных (операционных параметров). Для этих целей используется опция Чset-variable. Достаточно задать имя переменной var и ее новое значение value. Значения переменных, представляющих раз Приложение Д. Программы MySQL меры буферов или длины, задаются в байтах Поэтому подобные значения можно задавать как отдельным числом, так и с помощью суффиксов "к" или "м", обозначающих соответственно Кбайт или Мбайт. Регистр символов в таких суффиксах не играет роли, поэтому суффиксы "k" и "т" эквивалентны суффиксам "к" и "м". Список переменных для каждой программы можно найти в дальнейших описаниях этого приложения, а также получить с помощью опции Чhelp. -s, --silent. Определяет "тихий" режим работы. Это не означает, что программа вовсе не обменивается данными, просто она генерирует меньше выводимых данных, чем обычно. Некоторые программы позволяют задавать эту опцию несколько раз, добиваясь последовательного снижения объема вывода (подобные возможности имеются и в конфигурационных файлах). -S path_name, --socket=path_name. Для клиентских программ эта опция определяет полный путь и имя файла разъема, используемого для подключения к серверу. Файл разъема применяется для установления соединения с компьютером localhost. -u userjiame, --user=user_name. Клиентским программам эта опция сообщает имя пользователя для подключения к серверу. Если эта опция не определена, в качестве имени пользователя по умолчанию используется регистрационное имя в UNIX и ODBC в Windows. Серверу mysqld эта опция указывает имя учетной записи UNIX, под управлением которой следует запустить сервер. (Для достижения наибольшей эффективности можно запустить сервер с помощью этой опции с полномочиями пользователя root.) -v, --verbose. Определяет "шумный" режим, в котором программа генерирует больше выводимых данных, чем обычно. Некоторые программы позволяют задавать эту опцию несколько раз, добиваясь последовательного повышения объема вывода (подобные возможности имеются и в конфигурационных файлах). -V, --version. Указывает программе вывести строку с информацией о текущей версии и завершить работу. Конфигурационные файлы Конфигурационные файлы впервые появились в MySQL серии 3.22. Они применяются для записи и хранения программных опций MySQL, что исключает необходимость ввода этих опций в командной строке каждый раз при вызове программы. Конфигурационные файлы считываются программами isamchk, myisamchk, myisampack, mysql, mysqladmin, mysqld, mysqldump, mysqlimport, m y s q l. s e r v e r и pack_isam. Конфигурационный файл my-example. cnf можно найти в подкаталоге Часть IV. Приложения /share/mysql каталога инсталляции MySQL или каталоге supportfiles исходной дистрибуции. Все определенные в конфигурационном файле опции могут перекрываться опциями, заданными в командной строке. MySQL просматривает в поисках опций несколько файлов. Отсутствие конфигурационного файла не приводит к возникновению ошибки в работе программы. В операционных системах UNIX программа просматривает следующие файлы (в указанном порядке).

Имя файла Содержимое /etc/my, cnf Глобальные опции DATADlR/тау. cnf Опции сервера ~ /. my. cnf Пользовательские опции В операционных системах Windows считываются следующие файлы.

Имя файла Содержимое SYSTEMDiR\my. ini Глобальные опции С: \my. cnf Опции сервера DATADiR\my.cnf Пользовательские опции Часть DATADIR пути файла представляет путь к каталогу данных на рабочем компьютере. (Этот путь используется также сервером и не может изменяться с помощью опции Чdatadir.) На компьютерах, работающих под управлением Windows, часть DATADIR можно заменить каталогом C:\mysql\data. Часть SYSTEMDIR указывает путь к системному каталогу Windows (обычно C:\windows или C : \ W i n N T ). Несмотря на то, что для разделения компонентов пути в Windows используется символ "\", внутри конфигурационных файлов для подобных целей применяется символ "/". Если все же в качестве разделителя необходимо использовать "\", введите два символа "\\", поскольку один "\" рассматривается как символ выхода. Глобальные конфигурационные файлы считываются всеми программами, опции которым можно задавать через файлы. Расположенный в каталоге данных сервера конфигурационный файл предназначен только для отдельной программы-сервера. Аналогичным образом, пользовательские файлы применяются программами, запускаемыми отдельными пользователями. Внутри конфигурационных файлов опции распределены по группам. Например: [client] user=paul password=secret [mysql] no-auto-rehash [mysqlshow] status Приложение Д. Программы MySQL 22-1729 Названия групп заключаются в квадратные скобки и обычно соответствуют имени программ. В предыдущем примере группа [mysql] содержит опции для клиента mysql, a [mysqlshow] Ч для программы mysqlshow. Заданные в специальной группе [client] опции используются всеми клиентскими программами. Вообще, стандартные клиентские программы MySQL ищут как группу [client], так и группу с собственным названием. Например, программа mysql просматривает опции групп [client] и [mysql], а программа mysqlshowЧ [client] и [mysqlshow] соответственно. Все следующие за названием группы опции относятся к данной группе. Конфигурационный файл может содержать любое число групп, причем опции указанных позже групп обладают большим приоритетом, чем опции групп, приведенных первыми. Это означает, что если одна опция определяется несколько раз в просматриваемых программой группах, при запуске применяется значение, указанное последним. Каждая опция должна определяться в отдельной строке. Первое слово в такой строке является именем опции, которое может быть представлено в длинном формате без начальных дефисов. (Другими словами, для определения сжатия в командной строке можно использовать последовательности -С или Чcompress. В конфигурационном файле достаточно указать слово compress.) В группах конфигурационного файла можно задавать любые поддерживаемые программой опции. Если необходимо задать значение для какой-либо опции, отделите его от названия опции символом равенства "=". Рассмотрим для примера следующую командную строку:

mysql Чcompress Чuser=paul -set-variable max_allowed_packet=24M Чтобы представить ту же информацию в группе [mysql] конфигурационного файла, достаточно ввести следующие строки:

[mysql] compress user=paul set-variable=max_allowed_packet=24M Обратите внимание, что в конфигурационном файле помимо основного знака равенства между названием опции и ее значением знак равенства установлен также после предложения set-variable. Пустые строки конфигурационного файла, а также начинающиеся с символов "I" или ";

" строки рассматриваются как комментарии и пропускаются программой. Для представления специальных символов в значениях опций можно применять следующие последовательности выхода. Последовательность Значение \b \п Переход на новую строку \г Возврат каретки 674 Часть IV. Приложения \s \t \\ Пробел Табуляция Обратная косая черта При работе с конфигурационным файлом следует проявлять макси{мальную осторожность, чтобы не задать в группе [client] опции, повнятные только одной клиентской программе. Если, например, поместить |в эту группу опцию skip-line-numbers, понятную только программе "mysql, другие клиентские программы типа mysqlimport перестанут работать. (Попытка их запуска приведет к появлению сообщения об ошибке с последующей справочной информацией.) В такой ситуации необходимо перенести опцию skip-line-numbers в группу [mysql]. В группе [client] нужно определять опции, понятные всем программам MySQL, а именно опции compress, debug, help, host, password, pipe, port, select, user и version. (Хотя, конечно, бессмысленно помещать в файл опции help и version.) Пользовательские конфигурационные файлы следует хранить закрытыми Администратор должен обязательно убедиться, что файл с пользовательскими опциями принадлежит "правильному" пользователю и для него установлен режим 600 или 400, который закрывает доступ к файлу другим пользователям Мало кто из пользователей захочет, чтобы его имя и пароль стали доступны другим лицам. Переменные среды Для установки значений опций программы MySQL используют значения переменных среды. Эти переменные обладают самым низким приоритетом. Другими словами, опции, определенные с помощью переменных среды, могут перекрываться опциями, установленными в конфигурационном файле или командной строке. В частности, программы MySQL проверяют значения следующих переменных. ш MYSQL_DEBUG. Опции, используемые для отладки. Эта переменная может эффективно использоваться только в том случае, когда MySQL имеет встроенную поддержку средств отладки. Установка переменной MYSQLJ3EBUG аналогична определению опции Чdebug.

Pages:     | 1 |   ...   | 6 | 7 | 8 | 9 | 10 |   ...   | 11 |    Книги, научные публикации