Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
conspect.pdf
Скачиваний:
374
Добавлен:
17.03.2016
Размер:
27.86 Mб
Скачать

Базы данных

БГУИР, ПОИТ

 

 

Тема 5: Основы языка SQL (на базе MySQL)

5.1. Общие сведения об SQL

SQL (Structured Query Language, язык структурированных запросов) – универсальный язык, применяемый в реляционных СУБД для выполнения следующих классов операций.

Класс операций

Пример запроса

Администрирование БД/СУБД

CREATE USER 'user'@'localhost'

 

IDENTIFIED BY 'password'

Управление структурой БД

DROP TABLE IF EXISTS

 

`some_table`

 

 

Управление данными

SELECT `field_one`, `field_two`

 

FROM `some_tale` ORDER BY

 

`field_three`

 

 

Язык SQL основан на запросах (query) – инструкциях, оформленных определённым образом.

Каждая такая инструкция «просит» СУБД выполнить определённое действие, например извлечь данные, создать таблицу и т.п.

Все инструкции SQL имеют одинаковую структуру, которая изображена на рисунке.

Стр: 110/248

Базы данных

БГУИР, ПОИТ

 

 

5.2. Именование структур в MySQL

Правила именования структур: простой вариант для запомина-

ния

Следуя этим простым правилам, вы избавите себя от многих проблем:

ТОЛЬКО английский язык.

Допустимы буквы, цифры, знак подчёркивания.

Не более 64 символов (16 для меток).

Все идентификаторы заключены в обратные кавычки (``).

Все строковые константы заключены в апострофы (' ').

Пример правильно оформленного запроса

SELECT * FROM `t_1` WHERE `t_1`.`id`>100

Поскольку полноценное описание всех правил именования структур MySQL занимает достаточно большой объём, рекомендуется ознакомиться с ним здесь: http://dev.mysql.com/doc/refman/5.5/en/identifiers.html.

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

Чувствительность имён к регистру

SQL – нерегистрочувствительный язык, однако во многих (часто непредвиденных) случаях проблемы могут возникнуть с регистрочувствительностью имён структур.

Подробности см. здесь: http://dev.mysql.com/doc/refman/5.5/en/identifier-case- sensitivity.html

А для повседневной жизни стоит запомнить простое правило: «будем счи-

тать, что имена структур регистрочувтсвительны, и поступать соответственно».

Комментарии в MySQL

MySQL поддерживает следующие способы задания комментариев:

с помощью символа `#', за которым следует текст комментария до конца строки;

с помощью двух символов --, за которыми идёт текст комментария до конца строки;

и (для многострочных комментариев) с помощью символов /* (начало комментария) и */ (конец комментария).

Обратите внимание: при использовании для комментирования способа с -- (двойное тире) требуется наличие хотя бы одного пробела после второго тире!

Стр: 111/248

Базы данных БГУИР, ПОИТ

Пример использования комментариев

--

MySQL

dump 10.13

Distrib 5.5.13, for Win32 (x86)

--

Host:

localhost

Database: dml

--------------------------------------------------------

--Server version 5.5.13

--

-- Table structure for table `payment`

--

DROP TABLE IF EXISTS `payment`;

/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */;

CREATE TABLE `payment` (

`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `money` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */;

Стр: 112/248

Базы данных

БГУИР, ПОИТ

 

 

5.3. Типы данных в MySQL

Общие сведения о строках в MySQL

Строка – последовательность символов, заключенных либо в одинарные кавычки (‘ ’), либо в двойные кавычки (“ ”). При использовании диалекта ANSI SQL допустимы только одинарные кавычки.

Например: 'a string'.

Внутри строки некоторые последовательности символов имеют специальное назначение, каждая из этих последовательностей начинается обратным слешем (\):

\0 \' \" \b \n \r \t \z \\ \% \_

Подробнее о строках в MySQL см. здесь: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html

Кавычки внутри строк MySQL

Существует несколько способов включить кавычки в строку:

SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'

hello

"hello"

""hello""

hel'lo

'hello

SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"

hello

'hello'

''hello''

hel"lo

"hello

Универсальное решение: строка берётся в апострофы, внутренние апострофы экранируются, это будет выглядеть так:

SELECT 'Using a \'very\' "special" string'

Using a 'very' "special" string

Общие сведения о числах в MySQL

Целые числа представляются в виде последовательности цифр.

Для чисел с плавающей точкой в качестве разделителя десятичных знаков используется символ ‘.’ (точка).

Числа обоих типов могут предваряться символом ’-’ (минус). Примеры допустимых чисел:

1221 0 -32 294.42 -32032.6809e+10

Стр: 113/248

Базы данных БГУИР, ПОИТ

Числовые типы данных

Тип

Байтов

Минимальное значение

Максимальное значение

 

 

 

 

 

 

(Знаковый/Беззнаковый)

(Знаковый/Беззнаковый)

 

 

 

 

TINYINT

1

-128

127

 

 

 

 

 

 

0

255

 

 

 

 

SMALLINT

2

-32768

32767

 

 

 

 

 

 

0

65535

 

 

 

 

MEDIUMINT

3

-8388608

8388607

 

 

 

 

 

 

0

16777215

 

 

 

 

INT

4

-2147483648

2147483647

 

 

 

 

 

 

0

4294967295

 

 

 

 

BIGINT

8

-9223372036854775808

9223372036854775807

 

 

 

 

 

 

0

18446744073709551615

 

 

 

 

DECIMAL

65

- 64 ‘9’ (зависит от точно-

65 ‘9’ (зависит от точно-

NUMERIC

symb

сти)

сти)

 

 

 

 

FLOAT

4

(зависит от точности, до

(зависит от точности, до

23 зн. п. з.)

23 зн. п. з.)

 

 

 

 

 

 

DOUBLE

 

(зависит от точности, до

(зависит от точности, до

(PRECISION)

8

53 зн. п. з.)

53 зн. п. з.)

REAL

 

 

 

 

 

 

 

 

BIT

64 bit

0

64 bits ‘1’

 

 

 

 

Типы данных даты и времени

Тип столбца

Формат и запись «значения ноль»

 

 

DATETIME

«0000-00-00 00:00:00»

 

 

DATE

«0000-00-00»

 

 

TIMESTAMP

00000000000000 (длина зависит от количества выводимых

символов)

 

 

 

TIME

«00:00:00»

 

 

YEAR

00

 

 

Для типов DATETIME, DATE, TIMESTAMP и YEAR даты с неоднозначным годом интерпретируются в MySQL по следующим правилам:

00-69 конвертируется в 2000-2069;

70-99 конвертируется в 1970-1999.

Стр: 114/248

Базы данных

БГУИР, ПОИТ

 

 

Строковые типы данных: CHAR и VARCHAR

Типы данных CHAR и VARCHAR различаются по способам хранения и извлечения.

Столбцы типа CHAR:

хранят строки фиксированной длины (0-255);

строки при хранении дополняются справа пробелами до заданной длины (эти пробелы удаляются при извлечении данных).

Столбцы VARCHAR:

хранят строки переменной длины (0-65535);

реальный размер при хранении равен ДЛИНА + 2 байта;

хранимые данные пробелами не дополняются, наоборот, концевые пробелы при хранении удаляются.

Строковые типы данных: BLOB и TEXT

Эти типы предназначены для хранения текстов и бинарных данных.

Модификации BLOB (регистрочувствительный тип):

TINYBLOB (2^8);

BLOB (2^16);

MEDIUMBLOB (2^24);

LONGBLOB (2^32).

Модификации TEXT (нерегистрочувствительный тип):

TINYTEXT (2^8);

TEXT (2^16);

MEDIUMTEXT (2^24);

LONGTEXT (2^32).

Множества и перечисления

ENUM – это столбец, который может принимать значение из списка допустимых значений, явно перечисленных в спецификации столбца в момент создания таблицы.

Перечисление может иметь максимум 65535 элементов.

CREATE TABLE `t4`

(

`en1` enum('orange','apple','grape') NOT NULL DEFAULT 'apple' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t4` (`en1`) VALUES ('grape'); SELECT * from `t4`;

Стр: 115/248

Базы данных

БГУИР, ПОИТ

 

 

SET – строковый тип, который может принимать ноль или более значений (до 64), каждое из которых должно быть выбрано из списка допустимых значений, определённых при создании таблицы.

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

MySQL сохраняет значения SET в численном виде, где младший бит сохраненной величины соответствует первому элементу множества.

Если вы делаете выборку столбца SET в числовом контексте, полученное значение содержит соответствующим образом установленные биты, создающие значение столбца.

CREATE TABLE `t5` (

`se1` SET('read', 'write', 'delete') NOT NULL ) ENGINE = InnoDB;

INSERT INTO `t5` (`se1`) VALUES ('read,write'); SELECT * from `t5`;

Стр: 116/248

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]