Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретические основы реляционных баз данных. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
936 Кб
Скачать

- 41 -

Для модификации могут использоваться выражения. Предположим, что студентам группы 345 за какие-то заслуги надо увеличить средний балл на 0.1. Тогда команда будет выглядеть следующим образом:

UPDATE students

 

 

 

SET gpa = gpa + 0.1

 

 

WHERE stgroup = '345';

 

 

UPDATE 2

 

 

 

 

SELECT * FROM nstudents ;

 

 

family

| name

| stgroup | gpa

| sex

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

+---------

+---------

+------

+-----

Балашов

| Андрей

| 342

| 5.00

| м

Катеринченко

| Андрей

| 342

| 4.59

| м

Колычева

| Лия

| 349

| 4.38

| ж

Никулкин

| Сергей

| 342

| 4.79

| м

Фахрудинова

| Тамара

| 342

| 4.12

| ж

Чертков

| Максим

| 344

| 4.31

| м

Макаркина

| Надежда

| 340

| 4.55

| ж

Малин

| Сергей

| 345

| 4.97

| м

Дубоделов

| Андрей

| 345

| 4.97

| м

(9 rows)

 

 

 

 

2.7. DDL (Язык описания данных)

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

До этой главы мы запрашивали таблицы данных и выполняли команды по извлечению этих данных, считая, что эти таблицы уже были созданы кем-то до нас.

Таблицы создаются командой CREATE TABLE. Эта команда создает пустую таблицу - таблицу без строк. Значения вводятся с помощью DML-команды INSERT. Команда CREATE TABLE определяет имя таблицы и описание набора имён столбцов, указанных в определенном порядке. Она также определяет типы данных и размеры столбцов. Каждая таблица должна иметь по крайней мере один столбец.

Синтаксис команды CREATE TABLE достаточно сложен, но в простейшем виде он следующий:

CREATE TABLE table-name

(<column name> <data type>[(size)], <column name> <data type> [(size)] ...);

Кпримеру, таблица students, которую мы постоянно использовали

впримерах, была создана следующей командой:

- 42 -

CREATE TABLE students ( family varchar(20), name varchar(15), stgroup varchar(5), gpa numeric(3,2),

sex char(1));

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

Знак подчеркивания ( _ ) обычно используется для разделения слов в именах таблиц.

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

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

Порядок столбцов по умолчанию соответствует их порядку в операторе CREATE TABLE.

2.7.2. Индексы

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

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

Хотя индекс значительно улучшает эффективность запросов, использование индекса может значительно замедлять операции модификации DML (такие, как INSERT, UPDATE и DELETE), а сам индекс занимает значительный объем памяти, поскольку его размер соизмерим с размером самой таблицы.

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

- 43 -

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

CREATE INDEX famstudents ON students (family, name);

CREATE INDEX

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

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

DROP INDEX famstudents; DROP INDEX

2.7.3. Изменение структуры таблицы после ее создания

Команда ALTER TABLE не является частью стандарта ANSI, но используется достаточно часто. Она используется для того, чтобы изменить определение (структуру) существующей таблицы. Обычно она добавляет столбцы к таблице. Типичный синтаксис добавления столбца к таблице:

ALTER TABLE

ADD <column name> <data type> <size>;

Столбец будет добавлен со значениями NULL для всех строк таблицы. Новый столбец станет последним по порядку столбцом таблицы. Вообще-то можно добавить сразу несколько новых столбцов, отделив их запятыми, в одной команде. Имеется возможность удалять или изменять столбцы.

Предположим, что нам нужно хранить информацию о студенческом билете студента, тогда используем следующую команду:

ALTER TABLE students ADD st_ticket VARCHAR(12); ALTER TABLE

Тогда при выборке данных из таблицы мы увидим следующее:

SELECT * FROM students ;

 

 

 

 

family

|name

|stgroup|

gpa

|sex | st_ticket

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

+-------

+-------

+

------

+----

+-----------

Балашов

|Андрей

| 342

|

5.00

| м

|

Катеринченко|Андрей

| 342

|

4.59

| м

|

Колычева

|Лия

| 349

|

4.38

| ж

|

Малин

|Сергей

| 345

|

4.87

| м

|

Никулкин

|Сергей

| 342

|

4.79

| м

|

Фахрудинова

|Тамара

| 342

|

4.12

| ж

|

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