0% found this document useful (0 votes)
9 views4 pages

Dbms Lab8

trigger

Uploaded by

vedikarana14
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views4 pages

Dbms Lab8

trigger

Uploaded by

vedikarana14
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

mysql> CREATE DATABASE IF NOT EXISTS library;

Query OK, 1 row affected (0.01 sec)

mysql> USE library;


Database changed
mysql>
mysql> CREATE TABLE BOOK (
-> Isbn VARCHAR(20) PRIMARY KEY,
-> Title VARCHAR(100),
-> SoldCopies INT
-> );
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> CREATE TABLE WRITING (
-> Isbn VARCHAR(20),
-> Name VARCHAR(100),
-> FOREIGN KEY (Isbn) REFERENCES BOOK(Isbn)
-> );
Query OK, 0 rows affected (0.04 sec)

mysql>
mysql> CREATE TABLE AUTHOR (
-> Name VARCHAR(100) PRIMARY KEY,
-> SoldCopies INT
-> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO BOOK (Isbn, Title, SoldCopies) VALUES


-> ('1111111111', 'Book A', 500),
-> ('2222222222', 'Book B', 300),
-> ('3333333333', 'Book C', 200);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql>
mysql> INSERT INTO WRITING (Isbn, Name) VALUES
-> ('1111111111', 'Author1'),
-> ('2222222222', 'Author2'),
-> ('3333333333', 'Author1');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql>
mysql> INSERT INTO AUTHOR (Name, SoldCopies) VALUES
-> ('Author1', 700), -- 500 (Book A) + 200 (Book C)
-> ('Author2', 300); -- 300 (Book B)
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> DELIMITER //
mysql>
mysql> CREATE TRIGGER update_author_soldcopies_after_book_update
-> AFTER UPDATE ON BOOK
-> FOR EACH ROW
-> BEGIN
-> DECLARE totalCopies INT;
->
-> -- Sum SoldCopies for the authors of the updated book
-> SELECT SUM(b.SoldCopies) INTO totalCopies
-> FROM BOOK b
-> JOIN WRITING w ON b.Isbn = w.Isbn
-> WHERE w.Name = (SELECT w2.Name FROM WRITING w2 WHERE w2.Isbn =
NEW.Isbn LIMIT 1);
->
-> -- Update the SoldCopies in the AUTHOR table
-> UPDATE AUTHOR
-> SET SoldCopies = totalCopies
-> WHERE Name = (SELECT w2.Name FROM WRITING w2 WHERE w2.Isbn =
NEW.Isbn LIMIT 1);
-> END //
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> DELIMITER ;
mysql> DELIMITER //
mysql>
mysql> CREATE TRIGGER update_author_soldcopies_after_writing_insert
-> AFTER INSERT ON WRITING
-> FOR EACH ROW
-> BEGIN
-> DECLARE totalCopies INT;
->
-> -- Sum SoldCopies for the author in the WRITING table
-> SELECT SUM(b.SoldCopies) INTO totalCopies
-> FROM BOOK b
-> JOIN WRITING w ON b.Isbn = w.Isbn
-> WHERE w.Name = NEW.Name;
->
-> -- If the author exists, update their SoldCopies
-> IF EXISTS (SELECT * FROM AUTHOR WHERE Name = NEW.Name) THEN
-> UPDATE AUTHOR
-> SET SoldCopies = totalCopies
-> WHERE Name = NEW.Name;
-> ELSE
-> INSERT INTO AUTHOR(Name, SoldCopies)
-> VALUES(NEW.Name, totalCopies);
-> END IF;
-> END //
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> DELIMITER ;
mysql> -- Update SoldCopies for Book A
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE BOOK


-> SET SoldCopies = 600
-> WHERE Isbn = '1111111111';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql>
mysql> -- Check the AUTHOR table to see if SoldCopies have been updated
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM AUTHOR;


+---------+------------+
| Name | SoldCopies |
+---------+------------+
| Author1 | 800 |
| Author2 | 300 |
+---------+------------+
2 rows in set (0.00 sec)

mysql> -- Insert a new writing entry


Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO WRITING (Isbn, Name) VALUES ('2222222222', 'Author3');


Query OK, 1 row affected (0.01 sec)

mysql>
mysql> -- Check the AUTHOR table again to see if SoldCopies for Author3 have been updated
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM AUTHOR;


+---------+------------+
| Name | SoldCopies |
+---------+------------+
| Author1 | 800 |
| Author2 | 300 |
| Author3 | 300 |
+---------+------------+
3 rows in set (0.00 sec)

You might also like