SQL - Введение

Имея очень продолжительный опыт работы с различными версиями SQL (более 15 лет) и постоянные обращения новичков с просьбами помочь разобраться (понять, решить проблему и т.д.) было решено написать серию небольших заметок, в помощь людям, не сталкивавшимся и боящимся аббревиатуры SQL, начать работать с этой новой для них и очень увлекательной технологией.

SQL(Structured Query Language или «язык структурированных запросов») - клиент северная технология, позволяющая относительно простым языком клиенту запросить у сервера необходимые ему данные, добавить, удалить или изменить их. Основу языка, как и много чего хорошего ;), заложила IBM в начале 70 годов прошлого века. Текущая реализация MySQL сервера поддерживает основную часть ставшей “классической” версии SQL-1992 и некоторые свои нестандартные функции.

Схема работы

Упрощенная классическая схема клиент северной технологии подразумевает наличие клиента инициирующего операции, сервера выполняющего задания и канала связи между ними. Для простоты понимания процесса представьте себя в качестве клиент, сервер это библиотека или человек на другом конце провода (или что-то аналогичное), ну и обычная телефонная линия это канал связи. Вы по телефону просите кого-то на другом конце провода выполнить манипуляции с книгой (например подсчитать их количество, вес книг на заданной полке и т.д.). В случае работы с базой - дать правильную вам нужно выполнить SQL команду.

Клиент <-канал связи->Сервер

В процессе работы необходимо постоянно помнить обо всех участниках процесса.

  • Клиент, должен правильно сформулировать задание для сервера (и в первую очередь для себя), иначе получится ошибочный результат или задание может выполняться очень долго или будет перегружать сервер. (если вы попросите пересчитать все страницы книг в библиотеке - то ответа от библиотекаря придётся ждать очень долго).
  • По каналу связи необходимо всегда стараться получить только минимальные необходимые вам данные, поскольку желающих иметь доступ к серверу может быть много и канал окажется попросту перегружен (если вам нужно определённая цитата из книги - попросите человека на другом конце провода вам её прочесть, а не зачитывать всю книгу, заставляя других посетителей ждать).
  • Сервер, должен быть правильно установлен, настроен и оптимизирован. Но не стоит его нагружать без надобности, если только вы не единственные его клиент “дорогими” запросами или огромным числом мелких. (если вы будете каждые 5 мин звонить и просить прочесть вам по 1 предложению - другим придётся терпеливо ждать своей очереди).

Версии серверов имеют некоторые незначительные отличия. Текущую версию вашего MySQL сервера можно узнать введя команду:

SELECT VERSION();

Обратите внимание:

  • команды MySQL нечувствительны к регистру, но в зависимости от платформы, он может учитывать регистр ввода имён баз и таблиц,
  • большинство SQL команд можно запускать в пакетном режиме, при этом команды должны быть разделены символом - ;
  • в дальнейшем, все команды будут приводится в сокращённом формате, достаточном для работы. Всю подробную информацию по языку и MySQL серверу всегда можно получить из первоисточника.

База

База данных состоит из объектов (таблиц, представлений, триггеров, хранимых процедур и т.д.). Практически ко всем из объектов можно получить доступ из SQL, зная инструкции (или команды).

Текущие доступные вам базы на сервере можно получить командой:

SHOW DATABASES;

Выбрать текущую базу для работы можно командой:

USE им_базы;

Получить текущую активную базу можно командой

SELECT DATABASE();

Создание или добавление новой базы выполняется командой:

CREATE DATABASE [IF NOT EXISTS] имя_базы;

Удаление существующей базы:

DROP DATABASE [IF EXISTS] имя_базы;

Обратите внимание:

  • существует список зарезервированных слов, которые вы не можете использовать при задании имени объектов базы,
  • в имени базы нежелательно использовать зарезервированные слова, и символы отличные от латинских маленьких букв и цифр,
  • длина имени базы ограниченна 64 символами,
  • инструкции в [ ] являются необязательными, но позволяют избежать вывода ошибок, в случае отсутствия или уже существования базы.

Таблицы

Вся информация пользователя хранится в таблицах базы. Все остальные объекты базы используются для удобства работы, сохранения настроек, процедур и некоторых вспомогательных нужд.

Таблицы, соответственно состоят из полей. В первом приближении, таблицы похожи на Excel таблицы, за исключением того, что в колонках могут быть данные только одного типа. Каждая строка таблицы содержит набор полей записей (колонок), где в каждом поле данные только его формата.

Просмотреть существующие таблицы в базе можно командой:

SHOW TABLES;

Обратите внимание:

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

Типы данных

Поля таблиц, как и переменные в большинстве языков программирования, имеют жёстко заданный тип данных, который может в них содержаться. При проектировании своих таблиц, и работе с существующими таблицами, и их любой их модификации - относитесь очень внимательно к содержащемуся в полях типу данных. Используйте тип, значения которого будут не больше заданного диапазона. Будте внимательны !

Основные типы данных это:

- Целые числа
префиксINT [UNSIGNED]

Стандартные для SQL типы INTEGER (или INT) и SMALLINT и дополнительно свои TINYINT, MEDIUMINT и BIGINT. Необязательны флаг UNSIGNED указывает на хранение в поле чисел больше 0 (границы диапазона соответственно увеличиваются).

ТипДлина (байт)Диапазон значений
TINYINT1от -128 до 127
SMALLINT2от -32 768 до 32 767
MEDIUMINT3от -8 388 608 до 8 388 607
INT4-2 147 483 648 до 2 147 483 647
BIGINT5от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

- С плавающей точкой (приблизительные и точные)
ИмяТипа[(length, decimals)] [UNSIGNED]
Приблизительные числовые значения данных, в которых

  • length - количество знаков числа,
  • decimals - количество знаков после десятичной точки, которые будут учитываться,
  • UNSIGNED указывает на хранение в поле чисел больше 0.

ТипДлина (байт)Диапазон значений
FLOAT4<=24 -3,402823466E+38 до -1,175494351E-38
DOUBLE825-53 -1,7976931348623157E+308 до -2,2250738585072014E-308
DECIMAL4<=24 -3,402823466E+38 до -1,175494351E-38
NUMERIC825-53 -1,7976931348623157E+308 до -2,2250738585072014E-308

DECIMAL и NUMERIC - точные значения, которые хранят число в виде строки, при этом для каждого десятичного знака используется один символ.

-Строки
тип(length)[BINARY]

  • length - ширина хранимой строки
  • BINARY - позволяет сравнивать строки с учётом регистра символов

ТипДлина (байт)Точность
CHARlenght255
VARCHARlenght65535
BINARYlenght255 (аналог CHAR BINARY )
VARBINARYlenght65535 (аналог VARCHAR BINARY )
BLOB 65635 байт
TEXT 65535 Байт
ENUMсписок значений65535
SETсписок значений64

-Дата и время

  • DATE - дата в формате ГГГГ-ММ-ДД
  • DATETIME - Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
  • TIMESTAMP - Дата и время в формате timestamp (но поле отображается в формате ГГГГММДДЧЧММСС)
  • TIME - время в формате ЧЧ:ММ:СС
  • YEAR - год в формате ГГГГ

ТипДиапазон
DATETIME‘1000-01-01 00:00:00' - '9999-12-31 23:59:59'.
DATE'1000-01-01' to '9999-12-31'
TIMESTAMP'1970-01-01 00:00:01' UTC - '2038-01-19 03:14:07' UTC
TIME'-838:59:59' - '838:59:59'
YEAR'1901' to '2155'

Обратите внимание:

  • Зачастую, смена типа данных в поле может привести к потере данных.
  • Незнание типа, или неправильное использование типа может вызвать проблемы при превышении ограничений на вводимые данные.
  • Неправильное использование при обработке может повлечь выдачу непредсказуемых данных и нарушение логики работы системы и вызывает трудно находимые ошибки.

Управление таблицами

После знакомства с типами данных и общим устройством таблиц можно переходить к операциям управления таблицами. При выполнении этих операций вы должны быть внимательны, ибо большинство из них могут значительно изменить структуру таблиц, что может привести к потере данных. Не забывайте делать резервные копии!

Просмотреть информацию по полям таблицы можно командой:

SHOW COLUMNS FROM имя_таблицы  или синоним DESC имя_таблицы;

Просмотреть информацию по таблицам:

SHOW TABLE STATUS;

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

DROP TABLE имя_таблицы

Создание таблицы
CREATE TABLE [IF NOT EXISTS] имя_таблицы [(имя_колнки тип данных,)];

Переименование таблицы:

ALTER TABLE исходное_имя_таблицы RENAME TO конечное_имя_таблицы

Изменение структуры таблицы:

(поле1 -> поле2)

ALTER TABLE имя_таблицы CHANGE поле1 поле2 тип_данных

(смена тип данных поля)

ALTER TABLE имя_таблицы MODIFY поле  тип_данных

(добавить поле)

ALTER TABLE имя_таблицы ADD поле  тип_данных [FIRST]

(удалить поле)

ALTER TABLE имя_таблицы DROP поле

После прочтения это материала вы должны уметь создавать и удалять базы и таблицы в них, а так же понимать общую специфику работы и различать типы данных, используемых SQL сервером. Отдохните и мы дальше продолжим знакомство с миром SQL

Предложения, замечания, пожелания - комментарии. Все вопросы задаём на форум