- •Введение
- •Лабораторное занятие № 1
- •Описание учебного примера.
- •Удаление таблиц
- •Создание таблиц
- •Имена ограничений
- •Ограничения null и not null
- •Ограничение primary key
- •IdSubject, idReport, nTerm));
- •Ограничение unique
- •Ограничение Foreign key
- •Ограничение check
- •Вопросы для самоконтроля к лабораторной работе № 1
- •Лабораторная работа № 2
- •Команда вставки - insert
- •Команда обновления - update
- •Команда удаления - delete
- •Вопросы для самоконтроля к лабораторной работе № 2
- •Лабораторная работа №3
- •Команда alter table
- •Модификация ограничений
- •Добавление ограничений с ограниченной областью проверки
- •Отключение и подключение ограничений
- •Правила для изменения и модификации описания столбцов
- •Добавление столбца
- •Модификация столбца
- •Удаление столбца
- •Удаление таблицы
- •Переименование таблицы
- •Вопросы для самоконтроля к лабораторной работе № 3
- •Лабораторная работа № 4
- •Выборка данных из нескольких таблиц
- •Определение условий выборки в предложении where.
- •Групповые функции и предложение group by
- •Наиболее часто встречающиеся ошибки при выполнении group by
- •Предложение order by
- •Вопросы для самоконтроля к лабораторной работе № 4
- •Лабораторная работа № 5
- •Подзапросы
- •Inner join Student s
- •Inner join Student s
- •Inner join
- •Inner join Student s
- •Вопросы для самоконтроля к лабораторной работе № 5
- •Лабораторная работа №6
- •Представления
- •Вопросы для самоконтроля к лабораторной работе № 6
- •Лабораторная работа №7
- •Хранимые процедуры
- •Оператор use
- •Оператор declare
- •Операторы set и select
- •Функция @@identity
- •Функция @@error
- •Объявление параметров
- •Изменение хранимых процедур
- •Удаление хранимой процедуры
- •Лабораторная работа №8
- •If exists
- •Вопросы для самоконтроля к лабораторной работе № 8
- •Задания в тестовой форме
- •Литература Оглавление
Правила для изменения и модификации описания столбцов
При корректировке таблиц нельзя:
добавлять новый столбец с опцией NOT NULL.
добавлять к столбцу опцию NOT NULL, если в нем есть пустые значения
уменьшить размер поля или изменить его тип, если в нем содержатся какие-либо данные.
Удалить столбец из таблицы, если на этот столбец были установлены какие-либо ограничения кроме NOT NULL| NULL
Добавление столбца
Синтаксис команды:
ALTER TABLE <имя таблицы>
ADD <имя столбца> <тип данных> <ширина столбца>
[DEFAULT <значение>] [,…n];
где DEFAULT – определяет значение столбца по умолчанию.
При добавлении столбца он автоматически становится последним в таблице. Изменить положение столбца в таблице не представляется возможным.
Пример 31
Задача.
Добавить столбец YearBegin (год начала учебы в институте) в таблицу Student, задав тип данных Datetime.
Решение.
ALTER TABLE Student
ADD YearBegin Datetime;
Пример 32
Задача.
Добавить столбец IDFacultet (Код факультета) в таблицу SGroup, задав тип данных INT и определив значение по умолчанию 1.
Решение.
ALTER TABLE SGroup
ADD IDFacultet INT Default 1;
Сразу обратим внимание, что DEFAULT реализовано в SQL Server 2000 как ограничение и поэтому при дальнейшей попытке удалить этот столбец, необходимо будет сначала удалить ограничение, а затем уже удалить столбец.
При добавлении нового столбца с ограничение NOT NULL в таблицу следует руководствоваться ниже перечисленными правилами.
Если в таблице уже есть данные, то добавление столбца осуществляется или в 3 этапа (см. Пример 34):
добавляется столбец, допускающий неопределенность значений
столбец заполняется
столбцу присваивается свойство NOT NULL.
Или в один этап, но, задав ему значение по умолчанию или определив его как столбец IDENTITY.
Если в таблице нет данных, то добавление столбца осуществляется в 2 этапа:
добавляется столбец, допускающий неопределенность значений
столбцу присваивается свойство NOT NULL.
Пример 33
Задача.
Добавить в таблицу SGroup, содержащую данные, столбец IDFacultet, установив для него ограничение NOT NULL.
Решение.
ALTER TABLE SGroup
ADD IDFacultet INT NOT NULL
Default 1;
Пример 34
Задача.
Добавить в таблицу SGroup, содержащую данные, столбец IDFacultet, установив для него ограничение NOT NULL.
Решение.
Добавляем столбец:
ALTER TABLE SGroup
ADD IDFacultet INT;
Заполняем столбец IDFacultet:
UPDATE SGroup SET IDFacultet=1
Назначаем ограничение NOT NULL:
ALTER TABLE SGroup
ALTER COLUMN IDFacultet INT NOT NULL
Модификация столбца
Синтаксис команды:
ALTER TABLE <имя таблицы>
ALTER COLUMN <имя столбца> <новый тип данных> <длина>
[DEFAULT <значение>]
[NULL|NOT NULL] [,…n];
SQL Server не разрешает изменять столбцы типа text, ntext, image, rowversion, вычисляемые столбцы, столбцы, используемые в репликации, и столбцы, на которые имеются ссылки в выражениях вычисляемых столбцов или ограничений. Нельзя удалить или изменить столбец, имеющий значение по умолчанию (ограничение DEFAULT). Однако можно увеличить размер столбцов переменой длины, которые используются в индексах, в ограничениях CHECK или UNIQUE.
Пример 35
Задача.
Увеличить ширину столбца NameGroup, увеличив ее до 20 символов.
Решение.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(20)
The command(s) completed successfully.
Однако если теперь сделать попытку вернуться к предыдущему размеру столбца, то она будет неудачной, поскольку столбец имеет ограничение UNIQUE.
Пример 36
Задача.
Уменьшить размер столбца NameGroup до 15 символов (предполагается, что ранее она была увеличена до 20 символов).
Решение.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(15)
На этот раз будет диагностирована ошибка.
Server: Msg 5074, The object 'SgroupNameGroupUnique' is dependent on column 'NameGroup'.
Server: Msg 4922, ALTER TABLE ALTER COLUMN NameGroup failed because one or more objects access this column.
Если столбец все-таки необходимо изменить, то сначала следует удалить ограничение SgroupNameGroupUnique,
ALTER TABLE SGroup
DROP CONSTRAINT SgroupNameGroupUnique
Затем уменьшить ширину столбца.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(15)
(2 row(s) affected)
Задание 10
Добавить в таблицу Student столбец Single, тип данных VARCHAR(3), назначив значение по умолчанию “Да”. Удалить столбец.
Задание 11
Добавить в таблицу Student столбец AVGMark, тип Numeric (5,2). В столбце будет храниться средняя оценка студента. Мы оставим этот столбец в базе данных лишь для того, чтобы в дальнейшем продемонстрировать с помощью него работу некоторых команд и процедур, написание которых как раз и будет обусловлено наличием этого избыточного столбца. Отсюда вывод - такие столбцы, содержащие расчетные данные, полученные на основании уже хранящихся в таблице данных, не следует включать в таблицы.
Задание 12
Изменить длины полей в соответствии с таблицей (см. Таблица 11). Выполнить анализ - почему не удалось выполнить заданные операции с некоторыми столбцами? Что необходимо предпринять, чтобы эти изменения всё же произвести?
Таблица 11
Имя поля |
Тип поля |
Размер |
Ограничения |
IDReport |
Varchar |
4 |
|
NameWork |
Varchar |
4 |
|
NameSubject |
Varchar |
4 |
|
DateHire |
Smalldatetime |
|
|
Mark |
Numeric |
2 |
NULL |
DeptName |
Varchar |
4 |
NULL |
NRecordBook |
Varchar |
6 |
|
NTerm |
Numeric |
2 |
|
NameReport |
Varchar |
35 |
|
NameSubject |
Varchar |
35 |
|
PIN |
Varchar |
4 |
|
TeachPost |
Varchar |
25 |
NULL |
Clock |
Numeric |
5.2 |
|
StName |
Varchar |
35 |
|
TeachName |
Varchar |
35 |
|