Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ПЗ
ЗВІТ
до лабораторної роботи №2
з дисципліни «Бази даних (частина ІІ)»
на тему: «Ознайомлення із мовою Transact-SQL»
Лектор:
доцент кафедри ПЗ
Павич Н. Я.
Мета: Навчитися використовувати T-SQL, DML та транзакції для зміни даних та управління запитами в SQL Server 2008.
Завдання
1.Створити базу даних з наступною архітектурою таблиць:
- Product (maker, model, type)- PC (code, model, speed, ram, hd, cd, price)- Laptop (code, model, speed, ram, hd, screen, price)- Printer (code, model, color, type, price)
2.Всі новостворені об’єкти бази даних помістити у наперед створену схему бази даних.
3.Внести відповідні дані у таблиці.
4.Використовуючи DML, видалити всі блокноти, що випускаються виробниками, які не випускають принтери.
5.Продемонструвати використання інструкцій для роботи із транзакціями та обробки помилок, використовуючи вірний та хибний запит.
6.Вивести відповідні повідомлення про статус виконання запиту.
Хід роботи
1.Створення бази даних і чотирьох таблиць: Product, PC, Laptop, Printer. Відповідні SQL скрипти:
USE [Librarians_Database]
GO
CREATE TABLE [ComputerFirm].[MyProduct](
[maker] [varchar](10) PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[type] [varchar](50) NOT NULL
)
GO
USE [Librarians_Database]
GO
CREATE TABLE [ComputerFirm].[MyPC](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[speed] [smallint] NOT NULL,
[ram] [smallint] NOT NULL,
[hd] [real] NOT NULL,
[cd] [varchar](10) NOT NULL,
[price] [money] NULL
)
GO
USE [Librarians_Database]
GO
CREATE TABLE [ComputerFirm].[MyLaptop](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[speed] [smallint] NOT NULL,
[ram] [smallint] NOT NULL,
[hd] [real] NOT NULL,
[price] [money] NULL,
[screen] [tinyint] NOT NULL
)
GO
USE [Librarians_Database]
GO
CREATE TABLE [ComputerFirm].[MyPrinter](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[color] [char](1) NOT NULL,
[type] [varchar](10) NOT NULL,
[price] [money] NULL
)
GO
Вигляд таблиць та встановлених зв’язків на діаграмі:
2. Створення схеми бази даних:
USE [Librarians_Database]
GO
CREATE SCHEMA [ComputerFirm] AUTHORIZATION [User]
GO
Задання створеної схеми схемою за замовчуванням для даного користувача. Після цього всі новостворені таблиці поміщатимуться в цю схему:
USE [Librarians_Database]
GO
ALTER USER [UserKlyovan] WITH DEFAULT_SCHEMA=[ComputerFirm]
GO
3. Внесення відповідних даних у таблиці:
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1428','PC');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1429','PC');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1621','Laptop');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('HP','3734','Laptop');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('HP','3992','Printer');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7144','PC');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7321','Laptop');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7979','Printer');
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPC]
VALUES(40,'1428',1200,512,160,'52x',250);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPC]
VALUES (41,'1428',1200,1024,500,'52x',350);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPC]
VALUES (84,'7144',1500,2048,320,'52x',500);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyLaptop]
VALUES(44,'1621',1200,512,160,400,15);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyLaptop]
VALUES (72,'3734',800,256,80,250,14);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyLaptop]
VALUES (87,'7321',1500,1024,240,NULL,15);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPrinter]
VALUES(75,'3992','y','Laser',200);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPrinter]
VALUES(88,'7979','n','Jet',140);
INSERT INTO [Librarians_Database].[ComputerFirm].[MyPrinter]
VALUES(89,'7979','n','Matrix',120)
4. Інформація про продукти комп’ютерної фірми (таблиця MyProduct):
Блокноти, які пропонує комп’ютерна фірма (таблиця MyLaptop):
Запит, який видаляє всі блокноти, що випускаються виробниками, які не випускають принтери:
DELETE FROM [ComputerFirm].[MyLaptop]
WHERE model = (SELECT model FROM ComputerFirm.MyProduct
WHERE maker NOT IN (SELECT maker FROM ComputerFirm.MyProduct
WHERE type = 'Printer')
AND type = 'Laptop')
5. Вірний запит: транзакція видаляє з таблиці Product рядок, ключ якого вже не використовується іншими таблицями:
USE Librarians_Database
GO
BEGIN TRANSACTION
BEGIN TRY
DELETE FROM ComputerFirmLibrarian.MyProduct
WHERE model = '1621';
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
ROLLBACK TRANSACTION;
END CATCH;
GO
Хибний запит: транзакція видаляє з таблиці Product рядок, ключ якого використовується іншою таблицею (Laptop) як зовнішній:
USE Librarians_Database
GO
BEGIN TRANSACTION
BEGIN TRY
DELETE FROM ComputerFirm.MyProduct
WHERE model = '7321';
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
ROLLBACK TRANSACTION;
END CATCH;
GO
6. У вірному запиті інструкція TRY видаляє відповідний рядок з таблиці Product; транзакція підтверджується:
У хибному запиті інструкція CATCH виводить таблицю з інформацією про неможливість видалення відповідного рядка з таблиці Product; здійснюється відкат транзакції:
Висновок: На цій лабораторній роботі я навчився використовувати Transact-SQL, DML та транзакції для зміни даних та управління запитами в SQL Server 2008; створив власну базу даних, вніс у неї відповідні дані та змінив у ній дані за допомогою DML та транзакцій.