Типы 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 | Изменяет имя таблицы, в конце инструкции необходимо указать новое имя. |
Просмотр данных в таблице |
||
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 до +127 | 1 байт |
SMALLINT | от -32 768 до +32 767 | 2 байта |
MEDIUMINT | от -8 388 608 до +8 388 607 | 3 байта |
INT | от -2 147 483 648 до +2 147 483 647 | 4 байта |
BIGINT | от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807 | 8 байт |
Кроме целых чисел разумеется можно хранить дробные. Они записываются в виде:
ИмяТипа[(Длина,ЗнаковПослеЗапятой)] [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 | дата и время в формате ГГГГММДДЧЧММСС, генерируется автоматически при вставке записи |
Перечисления и множества
Тип перечисления означает, что в поле могут содержаться не любые значения, а только одно из перечисленных: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 - имя столбца
Оператор | Значение |
---|---|
= | Равно |
<> | Неравно |
< | Меньше |
<= | Меньше либо равно |
> | Больше |
>= | Больше либо равно |
Например: 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 - имя таблицыВыводит данные только о структуре индексов таблицы.