Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.4.rtf
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
7.36 Mб
Скачать

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

Удалить таблицу из базы данных можно следующим образом:

DROP TABLE имяТаблицы;

Разумеется, при удалении таблицы теряются и все содержащиеся в ней данные. Во время работы с базой данных нередко создают­ся таблицы для временного хранения данных, полученных на каком-то промежуточном этапе. Рано или поздно такие таблицы подлежат удалению. Однако можно забыть это сделать. Кроме того, промежуточные таблицы, создаваемые приложениями, могут остаться в базе данных из-за сбоев. Поэтому для созда­ния временных таблиц лучше использовать оператор CREATE TEMPORARY TABLE,а не CREATE TABLE.

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

Разработка базы данных обычно происходит итеративно. Редко когда удается сразу оптимально определить структуру входящих в нее таблиц, чтобы потом их не переделывать. Кроме того, уже готовая база данных со временем может пополняться новыми таблицами, которые связываются с уже имеющимися. А установ­ка новых связей требует коррекции параметров в старых табли­цах. Модификация таблицы - это изменение ее структуры, т. е. добавление, удаление и переименование столбцов, а также изме­нение их типов и размеров.

Язык SQL обладает специальными средствами модификации таблиц. Если бы их не было или если отказаться их применять, то изменение структуры таблицы можно выполнить следующим образом:

  1. Создать новую рабочую таблицу с необходимой структурой.

  2. С помощью оператора INSERT INTO вставить в рабочую таблицу данные из исходной таблицы.

  3. Удалить исходную таблицу.

  4. Переименовать рабочую таблицу, присвоив ей имя исходной.

Все предыдущие операции можно выполнить посредством рас­смотренных ранее операторов SQL. Переименование таблицы можно сделать средствами программной среды разработки базы данных. Если же ограничиться только операторами SQL, то вме­сто переименования придется выполнить следующее:

  1. Создать новую таблицу с именем исходной и с такой же структурой, как у рабочей таблицы.

  2. С помощью оператора INSERT INTO вставить в новую таблицу данные из рабочей таблицы.

  1. Удалить рабочую таблицу.

Как видите, изменение структуры таблицы обычными операто­рами SQL довольно трудоемко. Значительно проще изменить структуру таблицы с помощью оператора ALTER TABLE (изменить таблицу). С помощью дополнительных ключевых слов можно выполнить следующие операции:

  • ADD COLUMN - добавить столбец;

  • DROP COLUMN - удалить столбец;

  • ALTER COLUMN - изменить тип, размер и ограничение столбца;

  • RENAME COLUMN - переименовать столбец;

  • RENAME ТО - переименовать таблицу.

Типичной задачей изменения структуры таблицы является добав­ление столбца. Это можно сделать с помощью SQL-выражения с таким синтаксисом:

ALTER TABLE имяТаблицы ADD COLUMN имяСтолбца тип(размер)

Например:

ALTER TABLE Студенты

ADD COLUMN Адрес CHAR(25);

Добавленный столбец оказывается последним в таблице, т. е. за­нимает крайнюю правую позицию. Иногда это неудобно. Пусть например, столбец Имя в таблице занимает первую позицию, а ра­нее забытый и позднее добавленный столбец Фамилия - десятую позицию. Чтобы выборка данных из этой таблицы выглядела привычным образом, приходится специально указывать необхо­димое расположение столбцов в операторе SELECT, например,

SELECT Имя, Фамилия FROM ...

Выражение ADD COLUMN может использоваться в выражении ALTER TABLE несколько раз - для каждого отдельного столбца. При определении параметров добавляемого столбца можно ука­зать ограничение для него. Следующее SQL-выражение добавля­ет в таблицу Студенты столбец ID_ст и объявляет его первичным ключом:

ALTER TABLE Студенты

ADD COLUMN ID_ст INTEGER PRIMARY KEY;

He следует забывать, что первичный ключ в таблице может быть только один. Если в таблице уже есть первичный ключ, то добав­ление столбца как первичного ключа не будет выполнено. Если вам требуется переназначить первичный ключ, то сначала необ­ходимо скорректировать соответствующим образом параметры уже имеющегося столбца, объявленного как первичный ключ, а затем добавить новый столбец с параметром PRIMARY KEY. Коррекцию столбца можно выполнить так: либо сначала удалить его, а затем добавить новый столбец с требуемыми параметрами либо изме­нить параметры существующего столбца с помощью оператора ALTER COLUMN.

Чтобы удалить столбец из таблицы, достаточно выполнить SQL-выражение со следующим синтаксисом:

ALTER TABLE имяТаблицы DROP COLUMN имяСтолбца;

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

Например, следующее выражение удаляет из таблицы Студенты столбец Примечание:

ALTE TABLE Студенты

DROP COLUMN Примечание;

Для изменения параметров существующего столбца, таких как тип, размер и ограничение, применяются ключевые слова ALTER COLUMN:

ALTER TABLE имяТаблицы

ALTER COLUMN имяСтолбца тип (размер) [ограничение] ;

Здесь квадратные скобки указывают, что заключенное в них вы­ражение не является обязательным.

В следующем примере в таблице Студент уже существующий столбец ФИО приобретает новые параметры. А именно будучи символьным, он получает увеличение длины до 50 символов и становится первичным ключом:

ALTER TABLE Студенты

ALTER COLUMN ФИО CHAR(50) PRIMARY KEY;

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

Переименовывать столбцы приходится редко, поскольку в вы­борках и представлениях всегда можно присвоить им нужные псевдонимы. Тем не менее, переименовать столбцы и таблицу можно с помощью оператора ALTER TABLE с ключевыми словами RENAME COLUMN ... ТО (переименовать столбец ... в).

Для переименования столбца используется следующий синтаксис:

ALTER TABLE имяТаблицы

RENAME COLUMN имяСтолбца ТО новоеИмяСтолбца;

При переименовании столбца его прежний тип, размер и ограни­чение сохраняются.

Для переименования таблицы используется похожий синтаксис:

ALTER TABLE имяТаблицы RENAME TO новоеИмяТаблицы;

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

1. Создайте временную таблицу с помощью оператора CREATE TEMPORARY TABLE.

  1. Скопируйте во временную таблицу данные из таблицы, струк­туру которой вы собираетесь модифицировать. Это можно сде­лать с помощью оператора INSERT INTO.

  2. Далее можно поступить двумя способами:

  • изменить структуру исходной таблицы так, как вам требуется. Этот способ лучше применять при коррекции структуры, не связанной с изменениями существующих ограни­чений на столбцы и/или на таблицу в целом;

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

4. Скопируйте данные из временной таблицы в таблицу с новой структурой, используя оператор INSERT INTO. Больше времен­ная таблица не нужна, она будет автоматически удалена по окончании сеанса работы с базой данных.

Рассмотрим пример.

Пусть имеется таблица Студенты (ID_студента, ФИО, Специальность), в которой первичным ключом является ФИО.

Требуется изменить первичный ключ, а именно сделать первич­ным ключом столбец ID_студента. Кроме того, необходимо в столбце ФИО запретить неопределенные значения, а также добавить столбец примечание неограниченной длины. Чтобы решить эту задачу, можно выполнить следующую последователь­ность запросов:

CREATE TEMPORARY TABLE stud_tmp (

ID_студента INTEGER,

ФИО CHAR(20) ,

Специальность CHAR(15)

);

INSERT INTO stud_tmp

SELECT * FROM Студенты;

DROP TABLE Студенты;

CREATE TABLE Студенты (

ID_студента INTEGER PRIMARY KEY,

ФИО CHAR(20) NOT NULL,

Специальность CHAR(15),

Примечание VARCHAR ) ;

INSERT INTO Студенты

SELECT * FROM stud_tmp;