
- •Типы данных столбцов
- •Пример:
- •То автоматически генерируется уникальный id (то же, если поле id вообще не указывать в команде вставки).
- •Обычно, следует выполнять select для set-столбца, используя оператор like или функцию find_in_set():
- •Но и такая форма также работает:
- •'Yyyy-mm-dd',yy-mm-dd' Например '98-12-31', "98.12.31', '98/12/31'
- •Примеры
- •Describe messy # Описать таблицу 'messy'
- •Show databases # Показать все доступные бд
- •Например, drop table people, animals, plants удалит эти три таблицы. Drop table oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'
- •Например, можно указать следующее:
- •Но нельзя указать:
- •Например:
- •Быстрая загрузка данных
- •Синтаксис оператора truncate
- •Примеры:
- •# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'. Обычно за этим следует удаление старых записей из 'data'.
- •(Например, select name from people; select mydata.People.Name from people ).
- •Пример: select date_format(date, "%w, %m %d %y") as nice_date from calendar
- •Пример: # Псевдоним колонки
- •# Псевдоним таблицы в MySql
- •Подзапросы -- Язык sql разрешает использовать в других операторах языка dml подзапросы, которые являются внутренними запросами, определяемыми оператором select.
- •Выбрать заглавие статьи, полный текст ее, и длину (в байтах) полного текста для всех статей, автор которых Stacie Sheldon. Функция lengtho возвращает длину заданной строки в символах.
- •Применение подзапросов в операторах изменения данных
- •Функции условий
- •Математические функции
- •Строковые функции
- •Дата и время
- •Остальные функции
- •Демонстрируется использование mysql в качестве несложного калькулятора:
- •Проверка таблицы при помощи команды describe:
- •Выборка всех данных
- •Выборка определенных строк. Выборка с условием
- •Операторы and и or можно использовать совместно.
- •Выборка определенных столбцов Достаточно просто перечислить имена нужных столбцов, разделив их запятыми.
- •Получить имена владельцев животных можно с помощью следующего запроса:
- •Предположим, нужно узнать, в каком возрасте животные давали приплод:
- •В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
- •Сортировку можно проводить по нескольким столбцам сразу.
- •Отсортировать результаты по возрасту также можно при помощи выражения orderby:
- •Максимальное значение столбца
Функции условий
IFNULL(x,y)— если x не NULL, тогда выдаёт x, иначе — y.
NULLIF(x,y)— если x и y равны, выдаёт NULL, если не равны — x.
IF(x,y,z)— если x = true (вернее, если x не равен 0 и не NULL), выдаёт y, если нет — z.
К примеру, в форуме хранится информация о пользователях и есть возможность не показывать другим пользователям свой Email. Делается поле show_email, в котором лежит 0, если пользователь не хочет показывать адрес, и 1, если разрешает.
SELECT ..., IF (show_email,CONCAT('<a href=mailto:',email,'>написать письмо</a>'),'адрес не указан') AS email, ...
Математические функции
MOD(N,M)или "%" — остаток от деления N на M.
FLOOR и CEILING— округление до целого вниз и вверх.
ROUND— округление до целого или до определенной десятичной дроби.
LEAST (X,Y,...) и GREATEST(X,Y,...)— минимальное и максимальное числа из указанных.
Не упоминаю стандартные математические функции взятия модуля, знака, работы с углами.
Строковые функции
CONV(N,система_из,система_в)— конвертация числа из одной системы исчисления в другую:select CONV("ff",16,10); => 255. Кстати, конвертировать можно не только в стандартных системах (2,8,10,16), но и в любых других от 2 до 36 — насколько хватает букв латинского алфавита.
CONCAT(X,Y,...)— объединение строк и чисел в одну строку (пример приведён выше).
CONCAT_WS(разделитель,X,Y,...)— аналог функцииimplode.
LENGTH(строка)—strlen.
LOCATE(подстрока, строка)—strpos.
SUBSTRING(строка, отступ, длина)—substr.
TRIM()— удаление лишних символов из начала и конца строки. В отличие от функции phptrimпозволяет не только пробелы, а любые символы и даже комбинации символов.
REPLACE (строка, X, Y)— заменяет в строке X на Y (не перепутайте порядок с порядком параметров в str_replace).
Дата и время
Функций много, отмечу только некоторые самые важные: неправда, что MySQL считает дни недели только с воскресенья, как принято в Америке. Нужно использовать не функцию DAYOFWEEK, а WEEKDAY, тогда понедельнику будет соответствовать номер 0, вторнику — 1, воскресенью — 6.
Для сложного форматирования даты (например, для вывода даты в виде 18.08.01), есть функции DATE_FORMAT (для даты и времени) и TIME_FORMAT (только для времени). Работа с этими функциями удобнее, чем использование своих собственных (потому что это средство стандартное и универсальное, чего в самопальном приспособлении добиться очень сложно), а так же быстрее (используются встроенные функции mysql-сервера, которые уже сидят в памяти, вместо компиляции при каждом запуске скрипта собственного кода).
Юниксовский timestamp MySQL тоже поддерживает — переводы в него и из него через функции UNIX_TIMESTAMP и FROM_UNIXTIME:
UNIX_TIMESTAMP([дата-время])— выдаёт дату в юниксовом формате (если аргумент пропущен — текущую дату).
FROM_UNIXTIME(дата [, формат])— выдаёт дату в обычном формате (во втором аргументе может быть указан формат по правилам как в DATE_FORMAT).
Кроме того, основные параметры даты — число, день недели и месяц (возможно и словом), год, квартал (!), неделя и многое другое доступно не только через общую функцию DATE_FORMAT, но и через отдельные специальные функции.