From 6cab3dc89648b4af3f56585df6f2a8a8f9657b50 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:14:17 +0000 Subject: [PATCH 01/13] Setting up GitHub Classroom Feedback From 623b7a69a709b7128156c1b85ea211d57cbd44f5 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:14:47 +0000 Subject: [PATCH 02/13] Add assignment deadline url --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cb21b12..9ac4bee 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/8egdwdH8) [![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-718a45dd9cf7e7f842a935f5ebbe5719a5e09af4491e668f4dbf3b35d5cca122.svg)](https://classroom.github.com/online_ide?assignment_repo_id=12109866&assignment_repo_type=AssignmentRepo) # Required Lab Work Submission Please refer to the lab manual (Lab 2 on transactions and check constraints) available here for the detailed instructions: [https://elearning.strathmore.edu/course/view.php?id=3277](https://elearning.strathmore.edu/course/view.php?id=3277) From 8ef7d16288c07fe28797983d722bbdcdb6f9136b Mon Sep 17 00:00:00 2001 From: makhatsa Date: Thu, 5 Oct 2023 18:59:45 +0300 Subject: [PATCH 03/13] Create makhatsa.mysql 1 first commit --- makhatsa.mysql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 makhatsa.mysql diff --git a/makhatsa.mysql b/makhatsa.mysql new file mode 100644 index 0000000..f8d3c98 --- /dev/null +++ b/makhatsa.mysql @@ -0,0 +1,2 @@ +----to list database +show DATABASES; \ No newline at end of file From 37ba55bf24720845caaa5c2f78f6b74d40db2509 Mon Sep 17 00:00:00 2001 From: Dennis Kipyego Date: Thu, 5 Oct 2023 18:59:46 +0300 Subject: [PATCH 04/13] Create 075855-triggers.mysql Initial commit --- 075855-triggers.mysql | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 075855-triggers.mysql diff --git a/075855-triggers.mysql b/075855-triggers.mysql new file mode 100644 index 0000000..e69de29 From d55cfb7448dc493e052e9ab946bd78aa89e2523f Mon Sep 17 00:00:00 2001 From: Dennis Kipyego Date: Thu, 5 Oct 2023 20:12:23 +0300 Subject: [PATCH 05/13] Created table & Trigger Created the employees_ undo table and before update trigger on employees table --- 075855-triggers.mysql | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/075855-triggers.mysql b/075855-triggers.mysql index e69de29..8308aed 100644 --- a/075855-triggers.mysql +++ b/075855-triggers.mysql @@ -0,0 +1,61 @@ +-- List all the databases +SHOW DATABASES; +-- switch to the current database +USE 75855_lab2_triggers; +-- list of all tables +SHOW TABLES; + +-- STEP 1 +SHOW CREATE TABLE employees; +CREATE TABLE `employees` ( + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`employeeNumber`), + KEY `reportsTo` (`reportsTo`), + KEY `officeCode` (`officeCode`), + CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`), + CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +CREATE TABLE `employees_undo` ( + `date_of_change` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2), + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `change_type` varchar(50) NOT NULL, + PRIMARY KEY (`date_of_change`), + UNIQUE KEY `date_of_change_UNIQUE` (`date_of_change`) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- STEP 2 +CREATE + + TRIGGER TRG_BEFORE_UPDATE_ON_employees + BEFORE UPDATE ON employees FOR EACH ROW + + INSERT INTO `employees_undo` SET + `date_of_change` = CURRENT_TIMESTAMP(2), + `employeeNumber` = OLD.`employeeNumber` , + `lastName` = OLD.`lastName` , + `firstName` = OLD.`firstName` , + `extension` = OLD.`extension` , + `email` = OLD.`email` , + `officeCode` = OLD.`officeCode` , + `reportsTo` = OLD.`reportsTo` , + `jobTitle` = OLD.`jobTitle` , + `change_type` = 'An update DML operation was executed'; + + -- STEP 3 + SHOW TRIGGERS; From f8842783f2c79dd524174c9e661046f6862822b9 Mon Sep 17 00:00:00 2001 From: Clarian Makungu Date: Thu, 19 Oct 2023 18:48:35 +0300 Subject: [PATCH 06/13] triggers lab steps --- 170490 -triggers.mysql | 92 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 170490 -triggers.mysql diff --git a/170490 -triggers.mysql b/170490 -triggers.mysql new file mode 100644 index 0000000..cc0d719 --- /dev/null +++ b/170490 -triggers.mysql @@ -0,0 +1,92 @@ +-- List all the databases +SHOW DATABASES; +-- switch to the current database +USE 75855_lab2_triggers; +-- list of all tables +SHOW TABLES; + +-- STEP 1 +SHOW CREATE TABLE employees; +CREATE TABLE `employees` ( + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`employeeNumber`), + KEY `reportsTo` (`reportsTo`), + KEY `officeCode` (`officeCode`), + CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`), + CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +CREATE TABLE `employees_undo` ( + `date_of_change` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2), + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `change_type` varchar(50) NOT NULL, + PRIMARY KEY (`date_of_change`), + UNIQUE KEY `date_of_change_UNIQUE` (`date_of_change`) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- STEP 2 +CREATE + + TRIGGER TRG_BEFORE_UPDATE_ON_employees + BEFORE UPDATE ON employees FOR EACH ROW + + INSERT INTO `employees_undo` SET + `date_of_change` = CURRENT_TIMESTAMP(2), + `employeeNumber` = OLD.`employeeNumber` , + `lastName` = OLD.`lastName` , + `firstName` = OLD.`firstName` , + `extension` = OLD.`extension` , + `email` = OLD.`email` , + `officeCode` = OLD.`officeCode` , + `reportsTo` = OLD.`reportsTo` , + `jobTitle` = OLD.`jobTitle` , + `change_type` = 'An update DML operation was executed'; + + -- STEP 4 + SHOW TRIGGERS; + UPDATE `employees` +SET +`lastName` = 'Muiruri' +WHERE + +`employeeNumber` = '1056'; +SELECT * FROM employees_undo; + +-- STEP 5 +CREATE TABLE `customers_data_reminders` ( +`customerNumber` int NOT NULL COMMENT 'Identifies the customer whose data +is partly missing', +`customers_data_reminders_timestamp` timestamp(2) NOT NULL DEFAULT +CURRENT_TIMESTAMP(2) COMMENT 'Records the time when the missing data was +detected', +`customers_data_reminders_message` varchar(100) NOT NULL COMMENT 'Records +a message that helps the customer service personnel to know what data is +missing from the customer\'s record', +`customers_data_reminders_status` tinyint NOT NULL DEFAULT '0' COMMENT +'Used to record the status of a reminder (0 if it has not yet been +addressed and 1 if it has been addressed)', +PRIMARY KEY +(`customerNumber`,`customers_data_reminders_timestamp`,`customers_data_remi +nders_message`,`customers_data_reminders_status`), +CONSTRAINT `FK_1_customers_TO_M_customers_data_reminders` FOREIGN KEY +(`customerNumber`) REFERENCES `customers` (`customerNumber`) +ON DELETE CASCADE +ON UPDATE CASCADE +) ENGINE=InnoDB COMMENT='Used to remind the customer service personnel +about a client\'s missing data. This enables them to ask the client to +provide the data during the next interaction with the client.' \ No newline at end of file From 432c5cf1fd68b7db700f626c9d597031b6c06bba Mon Sep 17 00:00:00 2001 From: Clarian Makungu Date: Thu, 19 Oct 2023 19:38:29 +0300 Subject: [PATCH 07/13] Update 170490 -triggers.mysql --- 170490 -triggers.mysql | 82 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/170490 -triggers.mysql b/170490 -triggers.mysql index cc0d719..43e1d46 100644 --- a/170490 -triggers.mysql +++ b/170490 -triggers.mysql @@ -67,7 +67,7 @@ WHERE `employeeNumber` = '1056'; SELECT * FROM employees_undo; --- STEP 5 +-- STEP 5 Create a table to store reminders CREATE TABLE `customers_data_reminders` ( `customerNumber` int NOT NULL COMMENT 'Identifies the customer whose data is partly missing', @@ -89,4 +89,82 @@ ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB COMMENT='Used to remind the customer service personnel about a client\'s missing data. This enables them to ask the client to -provide the data during the next interaction with the client.' \ No newline at end of file +provide the data during the next interaction with the client.' + +-- STEP 6 Create a trigger that has multiple statements +DELIMITER $$ +CREATE TRIGGER TRG_AFTER_INSERT_ON_customers +AFTER INSERT ON customers FOR EACH ROW +BEGIN +IF NEW.postalCode IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to record the client\'s postal code'); +END IF; +IF NEW.salesRepEmployeeNumber IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to assign a sales representative to the client'); +END IF; +IF NEW.creditLimit IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to set the client\'s credit limit'); +END IF; +END$$ +DELIMITER ; + +-- STEP 7 Confirm the trigger is fired when insertion is made +INSERT INTO `customers` +(`customerNumber`, `customerName`, `contactLastName`, `contactFirstName`, +`phone`, `addressLine1`, `city`, `country`) +VALUES +('497', 'House of Leather', 'Wambua', 'Gabriel', '+254 720 123 456', '9 +Agha Khan Walk', 'Nairobi', 'Kenya'); + +-- STEP 8 Create a new table to store parts data +CREATE TABLE part ( +part_no VARCHAR(18) PRIMARY KEY, +part_description VARCHAR(255), +part_supplier_tax_PIN VARCHAR (11) CHECK (part_supplier_tax_PIN REGEXP +'^[A-Z]{1}[0-9]{9}[A-Z]{1}$'), +part_supplier_email VARCHAR (55), +part_buyingprice DECIMAL(10,2 ) NOT NULL CHECK (part_buyingprice >= 0), +part_sellingprice DECIMAL(10,2) NOT NULL, +CONSTRAINT CHK_part_sellingprice_GT_buyingprice CHECK +(part_sellingprice >= part_buyingprice), +CONSTRAINT CHK_part_valid_supplier_email CHECK (part_supplier_email +REGEXP '^[a-zA-Z0-9]{3,}@[a-zA-Z0-9]{1,}\\.[a-zA-Z0-9.]{1,}$') +); + +-- STEP 9. Create the following user-defined error in a trigger +DELIMITER // +CREATE TRIGGER TRG_BEFORE_UPDATE_ON_part +BEFORE UPDATE ON part FOR EACH ROW +BEGIN +DECLARE errorMessage VARCHAR(255); +DECLARE EXIT HANDLER FOR SQLSTATE '45000' +BEGIN +RESIGNAL SET MESSAGE_TEXT = errorMessage; +END; +SET errorMessage = CONCAT('The new selling price of ', +NEW.part_sellingprice, ' cannot be 2 times greater than the current selling +price of ', OLD.part_sellingprice); +IF NEW.part_sellingprice > OLD.part_sellingprice * 2 THEN +SIGNAL SQLSTATE '45000'; +END IF; +END// +DELIMITER ; + + +-- STEP 10. Confirm that the static, dynamic, and semantic constraints are working +INSERT INTO `part` (`part_no`, `part_description`, `part_supplier_tax_PIN`, +`part_supplier_email`, `part_buyingprice`, `part_sellingprice`) +VALUES ('001', 'The tyres of a 1958 Chevy Corvette Limited Edition', +'P05120157U', 'toysRus@gmail', '100', '50'); \ No newline at end of file From d83407f8e87f01b3baba02044c8e2b0511882dd4 Mon Sep 17 00:00:00 2001 From: Clarian Makungu Date: Thu, 19 Oct 2023 19:38:38 +0300 Subject: [PATCH 08/13] Create Clarian_Triggers.sql --- .github/Clarian_Triggers.sql | 171 +++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 .github/Clarian_Triggers.sql diff --git a/.github/Clarian_Triggers.sql b/.github/Clarian_Triggers.sql new file mode 100644 index 0000000..ec60266 --- /dev/null +++ b/.github/Clarian_Triggers.sql @@ -0,0 +1,171 @@ +-- List all the databases +SHOW DATABASES; +-- switch to the current database +USE 75855_lab2_triggers; +-- list of all tables +SHOW TABLES; + +-- STEP 1 +SHOW CREATE TABLE employees; +CREATE TABLE `employees` ( + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`employeeNumber`), + KEY `reportsTo` (`reportsTo`), + KEY `officeCode` (`officeCode`), + CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`), + CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +CREATE TABLE `employees_undo` ( + `date_of_change` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2), + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `change_type` varchar(50) NOT NULL, + PRIMARY KEY (`date_of_change`), + UNIQUE KEY `date_of_change_UNIQUE` (`date_of_change`) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- STEP 2 +CREATE + + TRIGGER TRG_BEFORE_UPDATE_ON_employees + BEFORE UPDATE ON employees FOR EACH ROW + + INSERT INTO `employees_undo` SET + `date_of_change` = CURRENT_TIMESTAMP(2), + `employeeNumber` = OLD.`employeeNumber` , + `lastName` = OLD.`lastName` , + `firstName` = OLD.`firstName` , + `extension` = OLD.`extension` , + `email` = OLD.`email` , + `officeCode` = OLD.`officeCode` , + `reportsTo` = OLD.`reportsTo` , + `jobTitle` = OLD.`jobTitle` , + `change_type` = 'An update DML operation was executed'; + + -- STEP 4 + SHOW TRIGGERS; + UPDATE `employees` +SET +`lastName` = 'Muiruri' +WHERE + +`employeeNumber` = '1056'; +SELECT * FROM employees_undo; + +-- STEP 5 Create a table to store reminders +CREATE TABLE `customers_data_reminders` ( +`customerNumber` int NOT NULL COMMENT 'Identifies the customer whose data +is partly missing', +`customers_data_reminders_timestamp` timestamp(2) NOT NULL DEFAULT +CURRENT_TIMESTAMP(2) COMMENT 'Records the time when the missing data was +detected', +`customers_data_reminders_message` varchar(100) NOT NULL COMMENT 'Records +a message that helps the customer service personnel to know what data is +missing from the customer\'s record', +`customers_data_reminders_status` tinyint NOT NULL DEFAULT '0' COMMENT +'Used to record the status of a reminder (0 if it has not yet been +addressed and 1 if it has been addressed)', +PRIMARY KEY +(`customerNumber`,`customers_data_reminders_timestamp`,`customers_data_remi +nders_message`,`customers_data_reminders_status`), +CONSTRAINT `FK_1_customers_TO_M_customers_data_reminders` FOREIGN KEY +(`customerNumber`) REFERENCES `customers` (`customerNumber`) +ON DELETE CASCADE +ON UPDATE CASCADE +) ENGINE=InnoDB COMMENT='Used to remind the customer service personnel +about a client\'s missing data. This enables them to ask the client to +provide the data during the next interaction with the client.' + +-- STEP 6 Create a trigger that has multiple statements +DELIMITER $$ +CREATE TRIGGER TRG_AFTER_INSERT_ON_customers +AFTER INSERT ON customers FOR EACH ROW +BEGIN +IF NEW.postalCode IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to record the client\'s postal code'); +END IF; +IF NEW.salesRepEmployeeNumber IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to assign a sales representative to the client'); +END IF; +IF NEW.creditLimit IS NULL THEN +INSERT INTO `customers_data_reminders` +(`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) +VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to set the client\'s credit limit'); +END IF; +END$$ +DELIMITER ; + +-- STEP 7 Confirm the trigger is fired when insertion is made +INSERT INTO `customers` +(`customerNumber`, `customerName`, `contactLastName`, `contactFirstName`, +`phone`, `addressLine1`, `city`, `country`) +VALUES +('497', 'House of Leather', 'Wambua', 'Gabriel', '+254 720 123 456', '9 +Agha Khan Walk', 'Nairobi', 'Kenya'); + +-- STEP 8 Create a new table to store parts data +CREATE TABLE part ( +part_no VARCHAR(18) PRIMARY KEY, +part_description VARCHAR(255), +part_supplier_tax_PIN VARCHAR (11) CHECK (part_supplier_tax_PIN REGEXP +'^[A-Z]{1}[0-9]{9}[A-Z]{1}$'), +part_supplier_email VARCHAR (55), +part_buyingprice DECIMAL(10,2 ) NOT NULL CHECK (part_buyingprice >= 0), +part_sellingprice DECIMAL(10,2) NOT NULL, +CONSTRAINT CHK_part_sellingprice_GT_buyingprice CHECK +(part_sellingprice >= part_buyingprice), +CONSTRAINT CHK_part_valid_supplier_email CHECK (part_supplier_email +REGEXP '^[a-zA-Z0-9]{3,}@[a-zA-Z0-9]{1,}\\.[a-zA-Z0-9.]{1,}$') +); + +-- STEP 9. Create the following user-defined error in a trigger +DELIMITER // +CREATE TRIGGER TRG_BEFORE_UPDATE_ON_part +BEFORE UPDATE ON part FOR EACH ROW +BEGIN +DECLARE errorMessage VARCHAR(255); +DECLARE EXIT HANDLER FOR SQLSTATE '45000' +BEGIN +RESIGNAL SET MESSAGE_TEXT = errorMessage; +END; +SET errorMessage = CONCAT('The new selling price of ', +NEW.part_sellingprice, ' cannot be 2 times greater than the current selling +price of ', OLD.part_sellingprice); +IF NEW.part_sellingprice > OLD.part_sellingprice * 2 THEN +SIGNAL SQLSTATE '45000'; +END IF; +END// +DELIMITER ; + + +-- STEP 10. Confirm that the static, dynamic, and semantic constraints are working + +INSERT INTO `part` (`part_no`, `part_description`, `part_supplier_tax_PIN`, +`part_supplier_email`, `part_buyingprice`, `part_sellingprice`) +VALUES ('001', 'The tyres of a 1958 Chevy Corvette Limited Edition', +'P05120157U', 'toysRus@gmail', '100', '50'); \ No newline at end of file From 471ef8914c3c403e0e458f7b742dc8779f2a01a3 Mon Sep 17 00:00:00 2001 From: kkipyego Date: Thu, 19 Oct 2023 19:41:14 +0300 Subject: [PATCH 09/13] Create 075855-triggers.sql Lab exercise on triggers --- 075855-triggers.sql | 195 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 075855-triggers.sql diff --git a/075855-triggers.sql b/075855-triggers.sql new file mode 100644 index 0000000..a33b047 --- /dev/null +++ b/075855-triggers.sql @@ -0,0 +1,195 @@ +-- List all the databases +SHOW DATABASES; +-- switch to the current database +USE 75855_lab2_triggers; +-- list of all tables +SHOW TABLES; + +-- STEP 1 +SHOW CREATE TABLE employees; +CREATE TABLE `employees` ( + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`employeeNumber`), + KEY `reportsTo` (`reportsTo`), + KEY `officeCode` (`officeCode`), + CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`), + CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +CREATE TABLE `employees_undo` ( + `date_of_change` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2), + `employeeNumber` int NOT NULL, + `lastName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `firstName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `extension` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `officeCode` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `reportsTo` int DEFAULT NULL, + `jobTitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `change_type` varchar(50) NOT NULL, + PRIMARY KEY (`date_of_change`), + UNIQUE KEY `date_of_change_UNIQUE` (`date_of_change`) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- STEP 2 +CREATE + + TRIGGER TRG_BEFORE_UPDATE_ON_employees + BEFORE UPDATE ON employees FOR EACH ROW + + INSERT INTO `employees_undo` SET + `date_of_change` = CURRENT_TIMESTAMP(2), + `employeeNumber` = OLD.`employeeNumber` , + `lastName` = OLD.`lastName` , + `firstName` = OLD.`firstName` , + `extension` = OLD.`extension` , + `email` = OLD.`email` , + `officeCode` = OLD.`officeCode` , + `reportsTo` = OLD.`reportsTo` , + `jobTitle` = OLD.`jobTitle` , + `change_type` = 'An update DML operation was executed'; + + -- STEP 3 + SHOW TRIGGERS; + + -- STEP 4 + UPDATE `employees` +SET +`lastName` = 'Muiruri' +WHERE +`employeeNumber` = '1056'; + +UPDATE `employees` +SET +`email` = 'mmuiruri@classicmodelcars.com' +WHERE +`employeeNumber` = '1056'; + +SELECT * FROM employees_undo; + +-- STEP 5 +CREATE TABLE `customers_data_reminders` ( + `customerNumber` int NOT NULL COMMENT 'Identifies the customer whose data is partly missing', + `customers_data_reminders_timestamp` timestamp(2) NOT NULL DEFAULT +CURRENT_TIMESTAMP(2) COMMENT 'Records the time when the missing data was detected', + `customers_data_reminders_message` varchar(100) NOT NULL COMMENT 'Records a message that helps the customer service personnel to know what data is missing from the customer\'s record', + `customers_data_reminders_status` tinyint NOT NULL DEFAULT '0' COMMENT +'Used to record the status of a reminder (0 if it has not yet been addressed and 1 if it has been addressed)', + PRIMARY KEY +(`customerNumber`,`customers_data_reminders_timestamp`,`customers_data_reminders_message`,`customers_data_reminders_status`), + CONSTRAINT `FK_1_customers_TO_M_customers_data_reminders` FOREIGN KEY +(`customerNumber`) REFERENCES `customers` (`customerNumber`) + ON DELETE CASCADE + ON UPDATE CASCADE +) ENGINE=InnoDB COMMENT='Used to remind the customer service personnel about a client\'s missing data. This enables them to ask the client to +provide the data during the next interaction with the client.'; + +-- STEP 6 +DELIMITER $$ +CREATE TRIGGER TRG_AFTER_INSERT_ON_customers +AFTER INSERT ON customers FOR EACH ROW +BEGIN + IF NEW.postalCode IS NULL THEN + INSERT INTO `customers_data_reminders` + (`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) + VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to record the client\'s postal code'); + END IF; + IF NEW.salesRepEmployeeNumber IS NULL THEN + INSERT INTO `customers_data_reminders` + (`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) + VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to assign a sales representative to the client'); + END IF; + IF NEW.creditLimit IS NULL THEN + INSERT INTO `customers_data_reminders` + (`customerNumber`, `customers_data_reminders_timestamp`, +`customers_data_reminders_message`) + VALUES (NEW.customerNumber, CURRENT_TIMESTAMP(2), 'Please remember +to set the client\'s credit limit'); + END IF; +END$$ +DELIMITER ; + +-- STEP 7 +INSERT INTO `customers` +(`customerNumber`, `customerName`, `contactLastName`, `contactFirstName`, +`phone`, `addressLine1`, `city`, `country`) +VALUES +('497', 'House of Leather', 'Wambua', 'Gabriel', '+254 720 123 456', '9 +Agha Khan Walk', 'Nairobi', 'Kenya'); + +DELETE FROM `customers` WHERE `customerNumber` = '497'; + +select * from customers_data_reminders; + +INSERT INTO `customers` +(`customerNumber`, `customerName`, `contactLastName`, `contactFirstName`, +`phone`, `addressLine1`, `city`, `country`, `salesRepEmployeeNumber`) +VALUES +('497', 'House of Leather', 'Wambua', 'Gabriel', '+254 720 123 456', '9 +Agha Khan Walk', 'Nairobi', 'Kenya', 1401); + +select * from customers_data_reminders; + +UPDATE `customers` SET `postalCode` = '00100' WHERE `customerNumber` = +'497'; + +select * from customers_data_reminders; + +-- STEP 8 +CREATE TABLE part ( + part_no VARCHAR(18) PRIMARY KEY, + part_description VARCHAR(255), + part_supplier_tax_PIN VARCHAR (11) CHECK (part_supplier_tax_PIN REGEXP +'^[A-Z]{1}[0-9]{9}[A-Z]{1}$'), + part_supplier_email VARCHAR (55), + part_buyingprice DECIMAL(10,2 ) NOT NULL CHECK (part_buyingprice >= 0), + part_sellingprice DECIMAL(10,2) NOT NULL, + CONSTRAINT CHK_part_sellingprice_GT_buyingprice CHECK +(part_sellingprice >= part_buyingprice), + CONSTRAINT CHK_part_valid_supplier_email CHECK (part_supplier_email +REGEXP '^[a-zA-Z0-9]{3,}@[a-zA-Z0-9]{1,}\\.[a-zA-Z0-9.]{1,}$') +); + + -- STEP 9 + DELIMITER // +CREATE TRIGGER TRG_BEFORE_UPDATE_ON_part +BEFORE UPDATE ON part FOR EACH ROW +BEGIN + DECLARE errorMessage VARCHAR(255); + DECLARE EXIT HANDLER FOR SQLSTATE '45000' + BEGIN + RESIGNAL SET MESSAGE_TEXT = errorMessage; + END; + + SET errorMessage = CONCAT('The new selling price of ', +NEW.part_sellingprice, ' cannot be 2 times greater than the current selling +price of ', OLD.part_sellingprice); + IF NEW.part_sellingprice > OLD.part_sellingprice * 2 THEN + SIGNAL SQLSTATE '45000'; + END IF; +END// +DELIMITER ; + +SHOW CREATE TABLE part; +-- STEP 10 +INSERT INTO `part` (`part_no`, `part_description`, `part_supplier_tax_PIN`, +`part_supplier_email`, `part_buyingprice`, `part_sellingprice`) +VALUES ('001', 'The tyres of a 1958 Chevy Corvette Limited Edition', +'P051201576U', 'toysRus@gmail.com', '100', '100'); + +UPDATE `part` SET `part_sellingprice` = '250.00' WHERE (`part_no` = '001'); + +SHOW TRIGGERS; + From 25555b0aa2d5601ac17e7ff9279dbd82cd5fedf6 Mon Sep 17 00:00:00 2001 From: kkipyego Date: Tue, 24 Oct 2023 13:44:05 +0300 Subject: [PATCH 10/13] Create Lab2-triggers_and_check_constraints.sql Initial Commit - Started on transaction --- Lab2-triggers_and_check_constraints.sql | 105 ++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 Lab2-triggers_and_check_constraints.sql diff --git a/Lab2-triggers_and_check_constraints.sql b/Lab2-triggers_and_check_constraints.sql new file mode 100644 index 0000000..089dfaf --- /dev/null +++ b/Lab2-triggers_and_check_constraints.sql @@ -0,0 +1,105 @@ +-- switch to the current database +USE 75855_lab2_triggers; +-- list of all tables +SHOW TABLES; + +-- STEP 1: Add missing columns + +-- create the new column in orders table to record the orderTotal amount +ALTER TABLE orders +ADD orderTotal decimal(10,2); + +-- create the new column in payments table to record payment status +ALTER TABLE payments +ADD paymentStatus VARCHAR(50); + +-- Trigger 1: check if the customerNumber is valid & if a payment is made before an order is inserted +DELIMITER // +CREATE TRIGGER order_payment_check +BEFORE INSERT ON orders +FOR EACH ROW +BEGIN + -- Check if the customerNumber exists in the customers table + SELECT COUNT(*) INTO @customer_exists + FROM customers + WHERE customerNumber = NEW.customerNumber; + + IF @customer_exists = 0 THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Invalid customerNumber'; + END IF; + +END; +// +DELIMITER ; + +-- Trigger 2: Update payment status when an order is inserted +DELIMITER // +CREATE TRIGGER update_payment_status +AFTER INSERT ON orders +FOR EACH ROW +BEGIN + UPDATE payments + SET paymentStatus = 'Paid' + WHERE customerNumber = NEW.customerNumber; +END; +// +DELIMITER ; + +-- Trigger 2: Update payment status when an order is inserted +DELIMITER // +CREATE TRIGGER payment_check +BEFORE INSERT ON payments +FOR EACH ROW +BEGIN + DECLARE paid_amount DECIMAL(10, 2); + -- Check if the payment is sufficient for the order + SELECT SUM(amount) INTO paid_amount + FROM payments + WHERE customerNumber = NEW.customerNumber; + + IF paid_amount < NEW.orderTotal THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Payment insufficient for the order'; + END IF; +END; +// +DELIMITER ; + + + + +-- STEP 2: Create a transaction to implement the triggers + +-- turn of autocommit option +SET autocommit = OFF; + +-- set isolation level +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; + +START TRANSACTION; + +-- Create a save point before an order is made +SAVEPOINT order_savepoint; + +-- Insert a new order +SELECT @orderNumber := MAX(orderNumber)+1 FROM orders; +INSERT INTO orders (orderNumber,orderDate, requiredDate, shippedDate, status, comments, customerNumber, orderTotal) +VALUES (@orderNumber,DATE(NOW()), DATE(DATE_ADD(NOW(), INTERVAL 3 DAY)), NULL, 'Processing', 'New order', 103, 1500); + +select * from orders order by orderNumber desc; +select * from payments order by customerNumber asc; + +-- Create a save point before a payment is made +SAVEPOINT payment_savepoint; + +-- Record a payment for the order +INSERT INTO payments (customerNumber, checkNumber, paymentDate, amount, paymentStatus) +VALUES (103, 'CHK123456', DATE(NOW()), 1200, 'Processing'); + +-- Commit the transaction +COMMIT; + +SET autocommit = ON; + + From 649db8aadb16385fd958fc7ce9557d3b3e32ac2c Mon Sep 17 00:00:00 2001 From: kkipyego Date: Mon, 30 Oct 2023 21:22:35 +0300 Subject: [PATCH 11/13] Created the transaction & implemented the triggers --- Lab2-triggers_and_check_constraints.sql | 74 +++++++++++-------------- 1 file changed, 31 insertions(+), 43 deletions(-) diff --git a/Lab2-triggers_and_check_constraints.sql b/Lab2-triggers_and_check_constraints.sql index 089dfaf..d4cd538 100644 --- a/Lab2-triggers_and_check_constraints.sql +++ b/Lab2-triggers_and_check_constraints.sql @@ -1,21 +1,29 @@ -- switch to the current database USE 75855_lab2_triggers; --- list of all tables -SHOW TABLES; --- STEP 1: Add missing columns +-- STEP 1: Transaction + +-- turn of autocommit option +SET autocommit = OFF; + +-- set isolation level +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; + +START TRANSACTION; -- create the new column in orders table to record the orderTotal amount ALTER TABLE orders ADD orderTotal decimal(10,2); --- create the new column in payments table to record payment status +-- create the new column in payments table to record the ordorderNumber ALTER TABLE payments -ADD paymentStatus VARCHAR(50); +ADD orderNumber int NOT NULL; + +-- Create Triggers --- Trigger 1: check if the customerNumber is valid & if a payment is made before an order is inserted +-- Trigger 1: check if the customerNumber is valid DELIMITER // -CREATE TRIGGER order_payment_check +CREATE TRIGGER order_customer_check BEFORE INSERT ON orders FOR EACH ROW BEGIN @@ -33,52 +41,31 @@ END; // DELIMITER ; --- Trigger 2: Update payment status when an order is inserted -DELIMITER // -CREATE TRIGGER update_payment_status -AFTER INSERT ON orders -FOR EACH ROW -BEGIN - UPDATE payments - SET paymentStatus = 'Paid' - WHERE customerNumber = NEW.customerNumber; -END; -// -DELIMITER ; +-- Trigger 2: Check if a payment is made when an order is inserted +DROP TRIGGER IF EXISTS order_payment_check; --- Trigger 2: Update payment status when an order is inserted +-- Recreate the trigger with new logic DELIMITER // -CREATE TRIGGER payment_check +CREATE TRIGGER order_payment_check BEFORE INSERT ON payments FOR EACH ROW BEGIN - DECLARE paid_amount DECIMAL(10, 2); - -- Check if the payment is sufficient for the order - SELECT SUM(amount) INTO paid_amount - FROM payments - WHERE customerNumber = NEW.customerNumber; + DECLARE order_amount DECIMAL(10, 2); - IF paid_amount < NEW.orderTotal THEN + -- Get the total amount of the corresponding order + SELECT orderTotal INTO order_amount + FROM orders + WHERE orderNumber = NEW.orderNumber; + + -- Check if the payment amount is less than the order amount + IF NEW.amount < order_amount THEN SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = 'Payment insufficient for the order'; + SET MESSAGE_TEXT = 'Payment amount is less than the order amount'; END IF; END; // DELIMITER ; - - - --- STEP 2: Create a transaction to implement the triggers - --- turn of autocommit option -SET autocommit = OFF; - --- set isolation level -SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; - -START TRANSACTION; - -- Create a save point before an order is made SAVEPOINT order_savepoint; @@ -88,14 +75,15 @@ INSERT INTO orders (orderNumber,orderDate, requiredDate, shippedDate, status, co VALUES (@orderNumber,DATE(NOW()), DATE(DATE_ADD(NOW(), INTERVAL 3 DAY)), NULL, 'Processing', 'New order', 103, 1500); select * from orders order by orderNumber desc; + select * from payments order by customerNumber asc; -- Create a save point before a payment is made SAVEPOINT payment_savepoint; -- Record a payment for the order -INSERT INTO payments (customerNumber, checkNumber, paymentDate, amount, paymentStatus) -VALUES (103, 'CHK123456', DATE(NOW()), 1200, 'Processing'); +INSERT INTO payments (customerNumber, checkNumber, paymentDate, amount, orderNumber) +VALUES (103, 'CHK123456', DATE(NOW()), 1200, @orderNumber); -- Commit the transaction COMMIT; From f427f4cb0d8d5c8885698bb910e94246a7ec54fd Mon Sep 17 00:00:00 2001 From: makhatsa Date: Tue, 31 Oct 2023 19:15:42 +0300 Subject: [PATCH 12/13] Update Lab2-triggers_and_check_constraints.sql Added a check constraints --- Lab2-triggers_and_check_constraints.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lab2-triggers_and_check_constraints.sql b/Lab2-triggers_and_check_constraints.sql index d4cd538..c6d8c81 100644 --- a/Lab2-triggers_and_check_constraints.sql +++ b/Lab2-triggers_and_check_constraints.sql @@ -18,6 +18,9 @@ ADD orderTotal decimal(10,2); -- create the new column in payments table to record the ordorderNumber ALTER TABLE payments ADD orderNumber int NOT NULL; +-- Add a check constraint to check the credit limit column in the customers table +ALTER TABLE customers +ADD CONSTRAINT check_credit_limit CHECK (creditLimit >= 0); -- Create Triggers From 8c747dc838ce3b7f5b7d491c4953d8595c347771 Mon Sep 17 00:00:00 2001 From: clarianmakungu <146371688+clarianmakungu@users.noreply.github.com> Date: Tue, 31 Oct 2023 21:08:49 +0300 Subject: [PATCH 13/13] Add files via upload Signed-off-by: clarianmakungu <146371688+clarianmakungu@users.noreply.github.com> --- .../Lab2-triggers_and_check_constraints.jpeg | Bin 0 -> 88530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/Lab2-triggers_and_check_constraints.jpeg diff --git a/.github/Lab2-triggers_and_check_constraints.jpeg b/.github/Lab2-triggers_and_check_constraints.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5f78ce5f00d793b19b841947f326cfb8cf17bfa9 GIT binary patch literal 88530 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%0Aw}jz*H8Y|5Uc3XN?G>e@jE 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�G)chlEA&pY3;oza>K=bNS32sU#Z)nD2KeG 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 literal 0 HcmV?d00001