Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Добавление ограничений с ограниченной областью проверкиСодержание книги
Поиск на нашем сайте
Синтаксис команды: ALTER TABLE <имя таблицы> [WITH CHECK| WITH NOCHECK] ADD {CONSTRAINT <имя ограничения>} FOREIGN KEY [REFERENCES<имя таблицы> (<имя столбца> [,…n])] | CHECK (<имя столбца> [,…n])} [ON DELETE CASCADE] В некоторых ситуациях может возникнуть необходимость в отмене проверки ограничений на какой–то период времени. Или возникнет ситуация, когда необходимо ввести новое ограничение, но вывести из-под его действия уже существующие данные. Сразу следует отметить, что ни одна из вышеперечисленных операций не может быть произведена для ограничений PRIMARY KEY и UNIQUE. Таким образом, если мы вводим новое ограничение и хотим, чтобы SQL Server 2000 проверил все существующие данные на соответствие этому ограничению, следует добавить это ограничение с опцией WITH CHECK, в противном случае - с опцией WITH NOCHECK. Временное отключение ограничений и использование опции WITH NOCHECK требует большой осторожности. В противном случае вы можете получить некорректный результат. Например, в таблице Progress могут оказаться оценки несуществующего студента, учащегося в несуществующей группе, изучающего несуществующие дисциплины и т.д. Пример 24 Задача. Добавить ограничение FOREIGN KEY для столбца IDGroup в таблице Student[5]. Все данные в таблице Student проверить на соответствие новому ограничению. Решение. ALTER TABLE Student WITH CHECK ADD CONSTRAINT StudentIDGroupForeign FOREIGN KEY (IDGroup) REFERENCES SGroup(IDGroup) Результат выполнения команды будет зависеть от состояния вашей базы данных. Вполне возможно, что команда не будет выполнена, тогда вы получите следующее сообщение, говорящее о том, что нарушена целостность базы данных. Server: Msg 547 ALTER TABLE statement conflicted with COLUMN FOREIGN KEY constraint 'StudentIDGroupForeign'. The conflict occurred in database 'Student', table 'SGroup', column 'IDGroup'. Пример 25 Задача. Добавить ограничение FOREIGN KEY для столбца IDGroup в таблице Student. Все данные в таблице Student введенные на момент создания ограничения проверке не подлежат. Решение. ALTER TABLE Student WITH NOCHECK ADD CONSTRAINT StudentIDGroupForeign FOREIGN KEY (IDGroup) REFERENCES SGroup(IDGroup) В этом случае независимо от содержания таблиц результат будет следующим. The command(s) completed successfully. Задание 5 Введите ограничение на оценку в отношении Успеваемость. Оценка не должна превышать 5 баллов. Номер семестра не должен превышать 10. Задание 6 Создайте внешние ключи во всех таблицах, используя опцию Foreign Key, при этом установите опцию каскадного удаления там, где это необходимо. Задание 7 Проследите за изменением ограничения Foreign key в отношениях, связанных с отношением Student. Еще раз восстановите все удаленные ограничения. Отключение и подключение ограничений Отключить можно как отдельное ограничение, указав его имя, так и все, используя опцию ALL Синтаксис команды: ALTER TABLE <имя таблицы> [CHECK| NOCHECK] {CONSTRAINT <имя ограничения>| ALL} FOREIGN KEY [REFERENCES<имя таблицы> (<имя столбца> [,…n])] | CHECK (<имя столбца> [,…n])} Пример 26 Задача. Отключить все ограничения в таблице Progress. Решение. ALTER TABLE Progress NOCHECK CONSTRAINT ALL Пример 27 Задача. Подключить все ограничения в таблице Progress. Решение. ALTER TABLE Progress CHECK CONSTRAINT ALL Пример 28 Задача. Отключить ограничение в ProgressMarkCheсk для столбца Mark таблицы Progress. Решение. ALTER TABLE Progress NOCHECK CONSTRAINT ProgressMarkCheсk После выполнения последней команды вы сможете ввести, например, 1 (единицу) в столбец Mark. Если Вы не намерены проверять ранее введенные данные, то синтаксис команды должен быть аналогичным синтаксису следующего примера (см. Пример 29), в противном случае синтаксис команды должен быть аналогичен примеру (см. Пример 30). Пример 29 Задача. Подключить ограничение в ProgressMarkCheck для столбца Mark таблицы Progress. Решение. ALTER TABLE Progress СHECK CONSTRAINT ProgressMarkCheck Пример 30 Задача. Подключить ограничение в ProgressMarkCheck для столбца Mark таблицы Progress и проверить корректность всех ранее введенных значений на соответствие этому ограничению. Решение. ALTER TABLE Progress WITH CHECK CHECK CONSTRAINT ProgressMarkCheck В этом случае подключить ограничение возможно только в том случае, когда все данные в таблице будут ему соответствовать. Задание 8 Отключите ограничения внешнего ключа в таблице Student. Введите в таблицу Student студента Васькина В.В. из несуществующей группы. Попытайтесь подключить ранее отключенное ограничение. Выполните все необходимые действия для того, чтобы вновь подключить ограничение, а все данные в отношении Student соответствовали условиям целостности базы данных. Задание 9 Смоделируйте ситуацию, когда необходимо отключить ограничения и разработайте мероприятия, которые позволят вам в дальнейшем привести базу данных в согласованное состояние, отвечающее всем условиям целостности. Правила для изменения и модификации описания столбцов При корректировке таблиц нельзя: · добавлять новый столбец с опцией 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
Удаление столбца Удалить столбец YearBegin alter table Student drop column YearBegin
Удаление таблицы Таблица удаляется с помощью команды DROP. Одной командой можно удалить сразу несколько таблиц. Однако вы не сможете удалить таблицу, если на нее есть ссылки из других таблиц. То есть вам сначала придется удалить соответствующий внешний ключ в ссылочной таблице и только после этого выполнить команду DROP. Синтаксис команды: DROP TABLE<имя таблицы>[, <имя таблицы>] Пример 37 Задача. Удалить таблицу Subject. Решение. На таблицу Subject ссылается как таблица Progress, так и таблица UPlan. В связи с этим удалению таблицы Subject должно предшествовать удаление ограничения ProgressSubjectForeign из таблицы Progress и ограничения Plan SubjectForeign из таблицы UPlan. ALTER TABLE Progress DROP CONSTRAINT ProgressSubjectForeign
ALTER TABLE UPlan DROP CONSTRAINT PlanSubjectForeign И, наконец, DROP TABLE Subject Переименование таблицы Иногда приходится корректировать не только ограничения и структуру таблицы, но и ее имя. Для переименования таблиц используется системная хранимая процедура SP_RENAME. Однако в этом случае следует быть предельно осторожным, так как в этом случае необходимо корректировать и все ограничения, ссылающиеся на эту таблицу. Синтаксис команды: EXEC SP_RENAME 'старое имя',' новое имя'; Пример 38 Задача. Переименовать таблицу Subject в Subject05 и восстановить первоначальное имя таблицы. Решение. EXEC SP_RENAME 'Subject','Subject05'; В ответ на выполнение этой команды система генерирует сообщение, где предупреждает о возможных последствиях изменения имени: Caution: Changing any part of an object name could break scripts and stored procedures. The object was renamed to 'Subject05'. EXEC SP_RENAME 'Subject05','Subject'; Задание 13 Переименовать таблицу Progress в таблицу Uspev. Задание 14 Восстановить прежнее название переименованной в предыдущем задании таблицы (см.Задание 13) (Progress). Вопросы для самоконтроля к лабораторной работе № 3 1. Каково основное назначение команды ALTER? 2. Какие ограничения подлежат корректировке? 3. Каковы правила назначения ограничения NULL/NOT NULL? 4. Когда нельзя изменить ширину столбца в таблице? 5. Какие существуют ограничения на изменения параметров столбца? 6. Как можно отменить действие ограничения?
Лабораторная работа № 4 Цель занятия: Изучить команды формирования запросов к базе данных (SELECT). Команда SELECT позволяет реализовывать все операторы реляционной алгебры над отношениями (таблицами) базы данных. Обязательными предложениями команды SELECT являются предложения SELECT и FROM. В самой простой форме, команда SELECT используется для того, чтобы извлечь информацию из таблицы. Не обязательно использовать все предложения команды, но обязательно соблюдать их порядок следования, то есть предложение ORDER BY всегда завершает команду SELECT, а предложение HAVING всегда стоит после GROUP BY, которое в свою очередь не может предшествовать предложению WHERE и т.п. Синтаксис команды SELECT: SELECT [DISTINCT] *|<столбец> [<псевдоним>] [,<групповая функция>] [,…n] FROM <таблица>[, …n]| (<подзапрос>) [WHERE <условие>] [GROUP BY<выражение группировки] [HAVING <условие отбора группы>] [ORDER BY < столбец >[,…n]] Команда SELECT позволяет извлечь определенную информацию из таблицы. Например, просмотреть содержимое одного или нескольких столбцов, присвоив столбцам вывода имена отличные от имен атрибутов в таблице, но более информативные. Чтобы вывести содержание всех столбцов, можно заменить их перечисление знаком *. В этом случае столбцы будут выведены в том порядке, в котором они следуют в таблице. Если вы хотите изменить порядок, то придется перечислить имена столбцов в нужном порядке. Предложение FROM используется для указания перечня таблиц, используемых в запросе и условия их соединения. Пример 39 Задача. Вывести все записи из отношения Progress. Решение. 1 вариант: SELECT * FROM Progress; Результат реализации запроса: 2 вариант: SELECT IDReport, IDSubject, NRecordBook, NTerm, PIN, Mark FROM Progress; Результат реализации запроса: Пример 40 Задача. Вывести названия предметов из таблицы Subject. Решение. SELECT NameSubject FROM Subject; Результат реализации запроса: Пример 41 Задача. Вывести список студентов из таблицы Student, присвоив столбцу вывода имя ФИО. Решение. SELECT StName ФИО FROM Student; Результат реализации запроса: Отдельно следует остановиться на предложении DISTINCT, которое позволяет вывести уникальные значения на множестве атрибутов, заданном в предложении SELECT. Пример 42 Задача. Вывести значения оценок, которые когда-либо выставлялись студентам. Решение. SELECT Mark Оценка FROM Progress; Результат реализации запроса: Результатом этого запроса будет множество повторяющихся значений оценок, в то время как нас интересует только их присутствие в исходном множестве, поэтому целесообразно этот запрос выполнить следующим образом: SELECT DISTINCT Mark Оценка FROM Progress; Результат реализации запроса:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-07-16; просмотров: 525; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.140.251 (0.008 с.) |