
- •Типы данных столбцов
- •Пример:
- •То автоматически генерируется уникальный 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:
- •Максимальное значение столбца
Быстрая загрузка данных
Самый быстрый способ загружать данные в MySQL - команда LOAD DATA INFILE. Это в 3-20 раз быстрее, чем использование инструкций INSERT. Для еще большего количества быстродействия можно использовать следующую процедуру, чтобы отключить формирование ключа на таблице, в то время как данные загружаются. Для этого надо находиться в MySQL каталоге баз данных, или обеспечивать полные пути к базе данных.
isamchk -rq -k0 [имя_базы_данных]/[имя_таблицы] |
Удаление ключей |
LOAD DATA INFILE ... |
Чтение данных |
isamchk rq[имя_базы_данных]/[имя_таблицы] |
Создание ключей таблицы заново |
mysqladmin reload. |
Сообщите, чтобы mysql использовал новую таблицу |
Удаление записей.
DELETE [LOW_PRIORITY] [QUICK] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT rows]
или
DELETE [LOW_PRIORITY] [QUICK] table_name[.*] [, table_name[.*] ...]
FROM table-references
[WHERE where_definition]
или
DELETE [LOW_PRIORITY] [QUICK]
FROM table_name[.*] [, table_name[.*] ...]
USING table-references
[WHERE where_definition]
Оператор DELETE удаляет из таблицы table_name строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.
Если оператор DELETE запускается без определения WHERE, то удаляются все строки. Если необходимо знать число удаленных записей при удалении всех строк, и если допустимы потери в скорости, то можно использовать команду DELETE в следующей форме:
DELETE FROM table_name WHERE 1>0;
Следует учитывать, что эта форма работает намного медленнее, чем DELETE FROM table_name без выражения WHERE, поскольку строки удаляются поочередно по одной.
LOW_PRIORITY, выполнение данной команды DELETE будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы.
QUICK, то обработчик таблицы при выполнении удаления не будет объединять индексы - в некоторых случаях это может ускорить данную операцию.
Второй многотабличный формат: идея заключается в том, что удаляются только совпадающие строки из таблиц, перечисленных перед выражениями FROM или USING. Это позволяет удалять единовременно строки из нескольких таблиц, а также использовать для поиска дополнительные таблицы.
Специфическая для MySQL опция LIMITдля командыDELETEуказывает серверу максимальное количество строк, которые следует удалить до возврата управления клиенту. Эта опция может использоваться для гарантии того, что данная командаDELETEне потребует слишком много времени для выполнения. Можно просто повторять командуDELETEдо тех пор, пока количество удаленных строк меньше, чем величинаLIMIT.
Можно указать множество таблиц в DELETEчтобы удалить записи из одной таблицы, основываясь на условии по множеству таблиц. Однако, с такой формой оператораDELETEнельзя использоватьORDER BYилиLIMIT.
Символы .* после имен таблиц требуются только для совместимости с Access:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
или
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
В предыдущем случае просто удалены совпадающие строки из таблиц t1 и t2.
Если применяется выражение ORDER BY, то строки будут удалены в указанном порядке. В действительности это выражение полезно только в сочетании с LIMIT
Пример: DELETE FROM somelog WHERE user = 'jcole' ORDER BY timestamp LIMIT 1
Данный оператор удалит самую старую запись (по timestamp), в которой строка соответствует указанной в выражении WHERE.
Специфическая для MySQL опция LIMIT для команды DELETE указывает серверу максимальное количество строк, которые следует удалить до возврата управления клиенту. Эта опция может использоваться для гарантии того, что данная команда DELETE не потребует слишком много времени для выполнения. Можно просто повторять команду DELETE до тех пор, пока количество удаленных строк меньше, чем величина LIMIT.