СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ • Представление – это виртуальная таблица, определяемая запросом, содержащим оператор SELECT. Эта виртуальная таблица состоит из данных одной или нескольких реальных таблиц, а для пользователей представление выглядит, как реальная таблица • К представлению можно применять операции SELECT, INSERT, UPDATE и DELETE. • Преимущество использования представлений заключается в том, что можно создавать представления с различными атрибутами без необходимости дублирования данных. • Их полезно использовать для обеспечения безопасности данных, для упрощения презентации данных и для логической презентации данных. Типы представлений • Подмножество колонок таблицы. Можно применять для упрощения или безопасности данных • Подмножество строк таблицы. • Связывание двух и более таблиц. • Агрегированная информация. Преимущества представлений • Одним из преимуществ использования представлений является то, что они всегда содержат самые свежие данные; • Еще одним преимуществом использования представлений является то, что представление может иметь уровень безопасности, отличный от его базовой таблицы. Ограничения представлений • Ограничения по колонкам (до 1024 колонок таблицы); • Ограничение базы данных; • Ограничение безопасности; • Правила целостности данных; • Ограничение на количество уровней вложенности представлений (до 32 уровней вложенности представлений) • Ограничение оператора SELECT. Создание представлений CREATE VIEW имя_представления *(колонка, колонка ...)+[WITH ENCRYPTION]AS ваш оператор SELECT[WITH CHECK OPTION] • Ключевое слово WITH ENCRYPTION указывает, что определение представления (оператор SELECT, определяющий представление) должно шифроваться. • Ключевое слово WITH CHECK OPTION указывает, что операции модифицирования данных, применяемые к представлению, должны отвечать критериям, содержащимся в операторе SELECT • CREATE VIEW spisok_st AS SELECT nume, prenume FROM student • CREATE VIEW emp_vw2 AS SELECT * FROM student WHERE univ_id= 10 Советы по использованию представлений • Используйте представления для обеспечения безопасности • Используйте преимущества индексов ИЗМЕНЕНИЕ И УДАЛЕНИЕ ПРЕДСТАВЛЕНИЙ • Для изменения представлений используйте оператор ALTER VIEW • ALTER VIEW имя_представления *(колонка, колонка, ...)+[WITH ENCRYPTION]AS ваш оператор SELECT[WITH CHECK OPTION] • Для удаления представления используйте оператор DROP VIEW • DROP VIEW имя_представления ТРАНЗАКЦИИ И БЛОКИРОВКА ТРАНЗАКЦИЙ • Транзакция – это набор операций, который выполняется как один логический блок. Использование транзакций позволяет SQL Server обеспечивать определенный уровень целостности и восстанавливаемости данных ACID-свойства • Атомарность. SQL Server обеспечивает, что в случае успешного выполнения транзакции фиксируются все модификации данных этой транзакции (в виде группы), а в случае неудачного выполнения транзакции не фиксируется ни одна из модификаций; ACID-свойства • Согласованность. Согласованность означает, что после окончания транзакции все данные остаются в согласованном состоянии (сохраняется целостность данных) – будь то успешно или неуспешно завершенная транзакция. ACID-свойства • Изолированность. Изолированность означает, что каждая транзакция действует так же, как если бы она была единственной в системе; иными словами, модификации, выполняемые в одной транзакции, изолируются от модификаций, выполняемых в другой параллельно выполняемой транзакции. ACID-свойства • Устойчивость. Устойчивость означает, что после того, как транзакция фиксирована, влияние этой транзакции в базе данных становится постоянным – даже в случае отказа системы. Уровни изолированности • SQL Server поддерживает четыре уровня изолированности. Уровень изолированности – значение, определяющее уровень, при котором в транзакции допускаются несогласованные данные, т.е. степень изолированности одной транзакции от другой. • Read uncommitted (Чтение незафиксированных данных). Транзакции изолированы только в такой степени, чтобы нельзя было читать физически поврежденные данные. • Read committed (Чтение фиксированных данных). Принятый по умолчанию уровень для SQL Server. На этом уровне разрешается чтение только фиксированных данных. • Repeatable read (Повторяемость чтения). Уровень, при котором чтение одной и той же строки или строк в транзакции дает одинаковый результат. • Serializable (Упорядочиваемость).Самый высокий уровень изолированности; транзакции полностью изолируются друг от друга. Поведение параллельных транзакций • Чтение нефиксированных данных (Dirty read). Чтение, при котором происходит считывание еще не фиксированных данных • Неповторяемое чтение (Nonrepeatable read). Несогласующиеся результаты, получаемые при повторном чтении. • Фантомное чтение (Phantom read). Чтение, возникающее в том случае, когда одна транзакция пытается прочитать строку, которая еще не существует в начале данной транзакции, но вставляется второй транзакцией, прежде чем закончится первая транзакция. Таблица. Поведение при различных уровнях изолированности Чтение Допустимое поведение нефиксиров анных Неповторя емое чтение Фантомное чтение данных Read Да Да Да Нет Да Да Нет Нет Да Нет Нет Нет uncommitted Read committed Repeatabl e read Serializa ble • • • • • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE • Для запуска транзакции используется оператор T-SQL BEGIN TRANSACTION. Чтобы указать конец транзакции, используется COMMIT TRANSACTION или ROLLBACK TRANSACTION. • BEGIN TRAN*SACTION+ *имя_транзакции] COMMIT [TRAN[SACTION+ *имя_транзакции+ ROLLBACK [TRAN[SACTION] [имя_транзакции] • • • • BEGIN TRAN update_student UPDATE student SET oras= 'XX‘ WHERE oras IS NULL COMMIT TRAN update_state • BEGIN TRAN update_student IF EXISTS (SELECT nume, prenume, nota FROM student a, note_exam b WHERE a.st_id = b.st_id AND curs_id = 10)UPDATE note_exam SET nota= 8 WHERE nota>5 • ELSE ROLLBACK TRAN update_student СОЗДАНИЕ ХРАНИМЫХ ПРОЦЕДУР • Хранимая процедура – это набор операторов T-SQL, который компилируется системой SQL Server в единый "план исполнения" • При первом запуске хранимой процедуры происходит ее компиляция и создание плана ее исполнения, который сохраняется в памяти. Затем при последующих вызовах этой процедуры SQL Server использует этот план исполнения без необходимости повторного компилирования • Имеется три типа хранимых процедур: системные хранимые процедуры, расширенные хранимые процедуры и простые определяемые пользователем хранимые процедуры Создание хранимых процедур • CREATE PROC*EDURE+ имя_процедуры * ,@имя_параметра тип_данных- + *= по_умолчанию+*OUTPUT+ *,...,n+AS оператор(ы)_t-sql • CREATE PROCEDURE stud_otl AS SELECT nume, prenume, avg(nota), a.st_id FROM student a, note_exam b WHERE a.st_id=b.st_id GROUP BY a.st_id HAVING avg(nota)>=9 • Для запуска хранимой процедуры просто обратитесь к ней по имени • Если оператор, вызывающий данную процедуру, входит в пакет операторов и не является первым оператором этого пакета, то вы должны использовать вместе с вызовом процедуры ключевое слово EXECUTE (сокращается до "EXEC") • SELECT getdate() Exec stud_otl • Использование RETURN. Вы можете возвращаться из любой точки хранимой процедуры в вызывающую программу с помощью ключевого слова RETURN, обеспечивающего безусловный выход из процедуры • Оператор ALTER PROCEDURE используется для изменения хранимой процедуры • ALTER PROC*EDURE+ имя_процедуры * ,@имя_параметра тип_данных- + *= по_умолчанию+ *OUTPUT+ *,...,n+AS оператор(ы)_t-sql • Оператор DROP PROCEDURE действует просто – он удаляет хранимую процедуру. Вы не сможете восстановить хранимую процедуру после ее удаления. • Системная хранимая процедура sp_helptext позволяет вам просматривать определение любой хранимой процедуры и оператора, который использовался для создания этой процедуры. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ТРИГГЕРОВ • Триггер – это специальный тип хранимой процедуры, которая запускается автоматически системой SQL Server при модифицировании какой-либо таблицы одним из трех операторов: UPDATE, INSERT или DELETE • Существует пять типов триггеров: UPDATE, INSERT, DELETE, INSTEAD OF и AFTER • Триггер INSTEAD OF выполняется вместо операции вставки, обновления или удаления. Триггер AFTER активизируется после какой-либо запускающей операции и обеспечивает механизм управления порядком выполнения нескольких триггеров • Триггеры запускаются только после завершения оператора, который вызвал их активизацию. • Триггер рассматривается как часть одной транзакции вместе с оператором, который вызывает его. • Триггер активизируется только один раз для одного оператора, даже если этот оператор влияет на несколько строк данных • Триггеры, как и ограничения, можно использовать для поддержки целостности данных и деловых правил, но триггер не следует использовать как замену ограничения, когда достаточно использовать только ограничение • Триггеры также полезно использовать для выполнения нескольких операций в ответ на одно событие модификации данных • CREATE TRIGGER имя_триггера ON ,таблица | представление-[WITH ENCRYPTION]{FOR | AFTER | INSTEAD OF} {[DELETE] [,] [INSERT] [,] [UPDATE]} [WITH APPEND] [NOT FOR REPLICATION] AS оператор_sql [...n] • Информацию о триггерах можно получить с помощью двух системных хранимых процедур: sp_helptext и sp_helptrigger • Чтобы изменить определение триггера, вы можете удалить и заново создать соответствующий триггер или использовать оператор ALTER TRIGGER. Для этого оператора используется тот же синтаксис, что и для оператора CREATE TRIGGER • ALTER TRIGGER Print_Update ON FOR UPDATE, INSERT AS PRINT "student was updated or a row was inserted" • DROP TRIGGER имя_триггера • Для удаления триггера из таблицы используйте оператор DROP TRIGGER • Термином “целостность данных” обозначается такое состояние базы данных, когда все хранящиеся в ней данные верны. Если происходит сохранение в базе неверных данных, то говорят, что целостность данных потеряна. • Среди методов SQL Server, предназначенных для обеспечения целостности данных, — • определения NOT NULL и DEFAULT, свойства IDENTITY, ограничения, правила, триггеры Определения NOT NULL • Задавая возможность ввода в поле пустых значений, вы определяете, могут ли в этом столбце таблицы храниться пустые значения. Пустое значение отличается от нуля, пробела или символьной строки нулевой длины. Пустое значение означает, что информация не введена, то есть значение не известно или не определено. Определения DEFAULT • Значения по умолчанию задают значения, которые будет использованы, если при добавлении строки значение поля не задано. Определения DEFAULT создают при определении таблицы или добавляют к уже существующей таблице. Свойства IDENTITY • В любой таблице разрешается создать единственный столбец, который содержит сгенерированные системой последовательные значения, уникально идентифицирующие каждую строку таблицы. Значения столбца с идентификатором обычно уникальны в пределах той таблицы, в которой они определяются. Ограничения • Ограничения позволяют определять, каким образом SQL Server автоматически обеспечивает целостность данных. Ограничения определяют правила, проверяющие допустимые значения столбцов, и представляют собой стандартные механизмы обеспечения целостности. Правила • Сначала следует создать правило с помощью оператора CREATE RULE. После этого при помощи системной хранимой процедуры sp_bindrule его привязывают к столбцу или пользовательскому типу данных. • При обеспечении ссылочной целостности SQL Server предотвращает следующие действия пользователей: • • добавление записей в связанную таблицу, если нет необходимой записи в главной таблице; • • изменение значений в главной таблице, в результате которого в связанной таблице останутся “зависшие” записи; • • удаление записей из главной таблицы при наличии связанных записей во внешней таблице. Ограничения PRIMARY KEY • В таблице обычно есть столбец (или комбинация столбцов), значения которых уникально идентифицируют каждую строку таблицы. Этот столбец (или столбцы) называются первичным ключом таблицы и обеспечивает целостность сущностей таблицы. • • • • • • CREATE TABLE Table1 ( Col1 INT, Соl2 VARCHAR(30), CONSTRAINT table_pk PRIMARY KEY (Col1) ) • SQL Server автоматически создает уникальный индекс, чтобы обеспечить соответствие требованию уникальности, которое выдвигает ограничение PRIMARY KEY. UNIQUE • Ограничение UNIQUE позволяет запретить ввод повторяющихся значений в некоторые столбцы, не участвующие в формировании первичного ключа. Несмотря на то, что уникальность обеспечивают оба ограничения — и UNIQUE, и PRIMARY KEY, в некоторых ситуациях вместо ограничения PRIMARY KEY следует использовать ограничение UNIQUE Ограничения FOREIGN KEY • Внешний ключ — это столбец или комбинация столбцов, которая используется для установления и обеспечения связи между данными двух таблиц. Связь между двумя таблицами устанавливается путем добавления к одной из таблиц столбца (столбцов) и определения для него ограничения FOREIGN KEY. • • • • • CREATE TABLE Table1 Col1 INT PRIMARY KEY, Col2 INT, CONSTRAINT col2_fk FOREIGN KEY (Col2) REFERENCES student(st_lD) Ограничения CHECK • Ограничения CHECK, обеспечивают доменную целостность путем ограничения значений, которые разрешено ввести в столбец. • Можно создать ограничение CHECK с помощью любого логического выражения, которое возвращает TRUE или FALSE в зависимости от используемого логического оператора. • • • • • CREATE TABLE Table1 ( Col1 INT PRIMARY KEY, Col2 INT CONSTRAINT limit_stip CHECK (Col2 BETWEEN 0 AND 1000), • Col3 VARCHAR(30) • )