Сервисы
Лоция
Отзывы
ПерЧАТка
Программы
Игры
Учебники
Справочники
Миелофон







Яндекс цитирования
 
Информация
Предлагаем подработку в сети. Платим за разговоры в чате!


GISMETEO: Погода по г.Екатеринбург



 
 

Типы SQL-запросов


Создание таблиц


create table NAME (COL1 TYPE FLAGS, COL2 TYPE FLAGS, ... [, KEYS (COL)])

NAME - имя создаваемой таблицы
COL - имя столбца таблицы
TYPE - тип данных, для хранения в ячейке FLAGS - модификационные флаги, накладывающие определенные ограничения на данные
KEYS - определение ключевых и индексируемых полей

Например: create table test (id varchar(255) not null, name tinytext not null, memo mediumtext, primary key (id))

Модификация таблиц


alter table NAME INSTR1, INSTR2, ...

NAME - имя изменяемой таблицы
INSTR - инструкции по изменению полей

Инструкции очень похожи на инструкции при создании полей в таблице посредством запроса create table, но перед ними ставится ключевое слово. Вот список некоторых команд:

КомандаОписание
addДобавляет столбец с указанным именем и типом. Можно добавлять и ключи инструкцией (например): add primary key(Поле1, Поле2, ...)
dropКоманда обратная add. Удаляет существующий столбец из таблицы.
modifyИзменяет тип существующего столбца. Если в таблице уже есть данные, то они могут блокировать некоторые модификации, например нельзя модифицировать текстовое поле в числовой тип, если там уже есть текст, не содержащий цифр.
changeЭта команда делает много всего, но нас интересует прежде всего переименование столбца. Переименование столбца производится инструкцией: change СтароеИмя НовоеИмя Тип. Без указания текущего типа данных столбца переименование не состоится.
renameИзменяет имя таблицы, в конце инструкции необходимо указать новое имя.
Например: alter table test add URL tinytext, modify id varchar(255) binary not null, drop memo, add len int not null, add index i_id(id)

Удаление таблиц


drop table NAME

NAME - имя удаляемой таблицы

Например: drop table test

Просмотр данных в таблице


select [distinct] [COL1, COL2] или * from NAME [where (УСЛОВИЯ)] [order by (COL) [desc]] [limit ЧИСЛО]

COL - имя столбца в таблице
NAME - имя просматриваемой таблицы
УСЛОВИЯ - необязательные условия отбора данных

Инструкция distinct означает, что нужно показывать только уникальные записи, но тогда в качестве указателя отображаемых столбцов нельзя использовать *. Инструкция limit указывает на максимальное количество строк, которые следует вывести для просмотра.

Например: select * from test where (len>0 and name='Sega') order by (name)

Типы данных


Числа

[Префикс]int[(Длина)] [unsigned]

Флаг UNSIGNED означает, что числа могут быть только положительными. Соответственно и диапазон увеличивается в два раза. Например тип: tinyint может хранить числа от -128 до +127, а тип: tinyint unsigned лежит в диапазоне от 0 до 255.

ТипДиапазонОписание
TINYINTот -128 до +1271 байт
SMALLINTот -32 768 до +32 7672 байта
MEDIUMINTот -8 388 608 до +8 388 6073 байта
INTот -2 147 483 648 до +2 147 483 6474 байта
BIGINTот -9 223 372 036 854 775 808 до +9 223 372 036 854 775 8078 байт
Длину числа можно уменьшить, указав ее в скобках после типа, но увеличить нельзя. Например: tinyint(1), будет хранить только положительные числа (для хранения любого символа нужно 2 бита, в том числе и для знака -) от 0 до 9, а тип: tinyint(5) ошибочен.

Кроме целых чисел разумеется можно хранить дробные. Они записываются в виде:

ИмяТипа[(Длина,ЗнаковПослеЗапятой)] [unsigned]

ТипДиапазонОписание
FLOAT Число с плавающей точкой небольшой точности
DOUBLE ...двойной точности
DECIMAL Вещественное число, хранящееся в виде строки (можно хранить огромные числа, но арифметические операции с ними ограничены возможностями Вашего процессора)

Строки

Строковые типы данных записываются в виде:

[Префикс]char(Длина) [binary],

[Префикс]text и

[Префикс]blob

Первая строка относится только к однострочным типам малой длины CHAR и VARCHAR. Они отличаются от остальных тем, что могут хранить от 0 до 255 символов и очищают вносимый данные от начальных и конечных пробелов и переносов строк (подобно функции chomp в Perl). CHAR(n) всегда должен содержать n символов (не больше, не меньше), VARCHAR(n) может содержать от 0 до n символов. Если не указан флаг BINARY, то при запросах типа select не учитывается регистр символов, т.е. "Вася" и "ВАСЯ" считаются одним словом. В таблице мы не указываем эти типы, поскольку с ними и так все ясно. Типы данных, содержащих в имени TEXT идентичны содержащим в имени BLOB, но в последнем типе данные хранятся в двоичном виде, поэтому поиск в них осуществляется с учетом регистра ("abc" и "ABC" для BLOB разные строки). В таблице BLOB-тип я тоже не указываю, поскольку его синтаксис идентичен TEXT, просто подставьте вместо TEXT - BLOB.

ТипДиапазонОписание
TINYTEXTдо 255 символовдо 255 байт
TEXTдо 65 535 символовдо 64Кб
MEDIUMTEXTдо 16 777 215 символовдо 16Мб
LONGTEXTдо 4 294 967 295 символовдо 4Гб

Дата и время

ТипДиапазонОписание
DATE дата в формате ГГГГ-ММ-ДД
TIME время в формате ЧЧ:ММ:СС
DATETIME дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
TIMESTAMP дата и время в формате ГГГГММДДЧЧММСС, генерируется автоматически при вставке записи
Обратите внимание, что тип timestamp на самом деле не является количеством секунд, прошедьших с 01.01.1970г., но в MySQL генерируется и изменяется автоматически при вставке и изменении записи, что может оказаться полезным при сортировке по дате. Дату можно сравнивать с текущей, она вызывается функцией curdate().

Перечисления и множества

Тип перечисления означает, что в поле могут содержаться не любые значения, а только одно из перечисленных:

enum(Значение1, Значение2, ...)

Еще один тип образует множество. То есть в поле такого типа может содержаться ряд из множества перечисленных (до 64), но никакое другое:

set(Значение1, Значение2, ...)

Модификаторы и флаги типов

К типу поля можно добавлять модификаторы, задающие дополнительные свойства для поля:
МодификаторОписание
not nullОзначает, что поле не может содержать пустое значение. Если поле числовое, то при вставке записи автоматически будет проинициализирован 0, текстовое - пустая строка (разумеется если поле не содержит значение по умолчанию и туда не вставляется значение).
defaultЗадает значение по умолчанию для поля. Оно будет использовано, если при вставке записи в это поле не вставлено значение. Добавляется значение строкой: default Значение. К сожалению в некоторых версиях default работает только со значением NULL
auto_incrementАвтоматически вставляет в поле уникальное числовое значение при добавлении записи. Работает только для числовых полей которое используется (или будет использоваться в этом-же запросе) в качестве ключа (см.ниже).
Так же после описания всех полей можно указывать ключи и индексы в виде:

ТипКлюча(Поле1, Поле2, ...), ТипКлюча2(Поле1, Поле2, ...), ...

Поля уже должны быть указаны на создание перед указанием их в качестве ключей. Индексы значительно ускоряют сортировку и отбор данных по полю, но несколько замедляют добавление данных и увеличивают размер базы. При указании индексов для текстовых полей, после названия поля, в круглых скобках можно указать количество первых символов, по которым будет построен индекс. Вот основные ключи MySQL:
Тип ключаОписание
primary keyПоле является первичным ключом, т.е. идентификатором записи для ссылки на нее при помощи индекса.
unique keyУказывает на то, что значение поля должно быть уникальным. Используется для полей, которым не нужна индексация, но нужно запретить вставлять повторяющиеся значения.
multiple keyМноготабличный индекс.
indexПростой индекс.

Добавление записей


insert into NAME (COL1, COL2, ...) values (ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2, ...)

NAME - имя таблицы
COL - имя столбца

Значения нечисловых столбцов должны браться в кавычки.

Например: insert into test (id, name, len) values ('123', 'Sega', 5)

Изменение записей


update NAME set COL1=ЗНАЧЕНИЕ1, COL2=ЗНАЧЕНИЕ2, ... [where(УСЛОВИЯ)]

NAME - имя таблицы
COL - имя столбца

Значения нечисловых столбцов должны браться в кавычки. Если опустить оператор where, то изменятся все колонки, указанные в запросе, для всех записей таблицы. Условия в MySQL строятся довольно просто. В простейшем варианте условия можно сравнивать значения полей. Если условие выполняется, то запись попадает в запрос и обрабатывается. Можно использовать логические операторы and (И) и or (ИЛИ), то есть несколько условий. При сложных условиях, для определения приоритета можно использовать скобки. Например если нам нужно обновить записи выполняющие условие1 и условие2 или условие3 и условие4, то пишем: where((условие1 and условие2) or (условие3 and условие4). В MySQL применяются следующие операторы сравнения:
ОператорЗначение
=Равно
<>Неравно
<Меньше
<=Меньше либо равно
>Больше
>=Больше либо равно
Все операторы сравнения можно без ограничений использовать для числовых полей и полей типа время и дата, для текстовых полей можно применять только = и <>. Поля можно сравнивать не только с фиксированными значениями, но и друг с другом, например так: ИмяПоля>=ИмяДругогоПоля. Кроме того можно использовать не просто присваивания к полю для обновления, но и арифметические выражения, декремент-инкремент и конкатенацию. Инкремент: ИмяПоля=ИмяПоля+Цифра, декремент: ИмяПоля=ИмяПоля-Цифра (инкремент и декремент применяется только для числовых полей), конкатенация: ИмяПоля=concat(ИмяПоля,'Строка') (только для текстовых типов). Из этого видно, что ИмяПоля является подобием переменных.

Например: update test set id='1234', len=15 where (name='Sega')

Удаление записей


delete from NAME [where(УСЛОВИЯ)]

NAME - имя таблицы
УСЛОВИЯ - Условия удаления записей

Например: delete from test where (name='Sega')

Специальные запросы


  • repair table NAME

    NAME - имя таблицы

    Исправляет испорченную таблицу. Если таблица перестала правильно отвечать на запросы, то примените к ней этот запрос.

  • desc NAME

    NAME - имя таблицы

    Выводит полные данные о структуре таблицы

  • show index from NAME

    NAME - имя таблицы

    Выводит данные только о структуре индексов таблицы.