Dbms Lab8
Dbms Lab8
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>
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>
mysql> -- Check the AUTHOR table to see if SoldCopies have been updated
Query OK, 0 rows affected (0.00 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)