Library Management System - SQL Script
<div class="highlight" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><span
style="color: #888888">-- Create database</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">DATABASE</span><span style="color: #bbbbbb"> </span>LibraryDB;
USE<span style="color: #bbbbbb"> </span>LibraryDB;
<span style="color: #888888">-- Table for storing book details</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">TABLE</span><span style="color: #bbbbbb"> </span>Books<span
style="color: #bbbbbb"> </span>(
<span style="color: #bbbbbb"> </span>BookID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">PRIMARY</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">KEY</span><span style="color: #bbbbbb"> </span>AUTO_INCREMENT,
<span style="color: #bbbbbb"> </span>Title<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">NOT</span><span style="color: #bbbbbb">
</span><span style="color: #008800; font-weight: bold">NULL</span>,
<span style="color: #bbbbbb"> </span>Author<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">NOT</span><span style="color: #bbbbbb">
</span><span style="color: #008800; font-weight: bold">NULL</span>,
<span style="color: #bbbbbb"> </span>Publisher<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>),
<span style="color: #bbbbbb"> </span>YearPublished<span style="color: #bbbbbb"> </span><span style="color:
#008800; font-weight: bold">YEAR</span>,
<span style="color: #bbbbbb"> </span>ISBN<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">20</span>)<span style="color: #bbbbbb">
</span><span style="color: #008800; font-weight: bold">UNIQUE</span>,
<span style="color: #bbbbbb"> </span>Quantity<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">NOT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">NULL</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">CHECK</span><span style="color: #bbbbbb"> </span>(Quantity<span style="color: #bbbbbb"> </span><span
style="color: #333333">>=</span><span style="color: #bbbbbb"> </span><span style="color: #0000DD; font-weight:
bold">0</span>)
);
<span style="color: #888888">-- Table for storing member details</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">TABLE</span><span style="color: #bbbbbb"> </span>Members<span
style="color: #bbbbbb"> </span>(
<span style="color: #bbbbbb"> </span>MemberID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">PRIMARY</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">KEY</span><span style="color: #bbbbbb"> </span>AUTO_INCREMENT,
<span style="color: #bbbbbb"> </span>Name<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">NOT</span><span style="color: #bbbbbb">
</span><span style="color: #008800; font-weight: bold">NULL</span>,
<span style="color: #bbbbbb"> </span>Email<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">UNIQUE</span>,
<span style="color: #bbbbbb"> </span>Phone<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">15</span>),
<span style="color: #bbbbbb"> </span>Address<span style="color: #bbbbbb"> </span><span style="color:
#007020">TEXT</span>,
<span style="color: #bbbbbb"> </span>MembershipDate<span style="color: #bbbbbb"> </span><span style="color:
#007020">DATE</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">DEFAULT</span><span style="color: #bbbbbb"> </span>CURDATE()
);
<span style="color: #888888">-- Table for storing library staff details</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">TABLE</span><span style="color: #bbbbbb"> </span>Staff<span
style="color: #bbbbbb"> </span>(
<span style="color: #bbbbbb"> </span>StaffID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">PRIMARY</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">KEY</span><span style="color: #bbbbbb"> </span>AUTO_INCREMENT,
<span style="color: #bbbbbb"> </span>Name<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">NOT</span><span style="color: #bbbbbb">
</span><span style="color: #008800; font-weight: bold">NULL</span>,
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">Role</span><span
style="color: #bbbbbb"> </span><span style="color: #007020">VARCHAR</span>(<span style="color: #0000DD;
font-weight: bold">50</span>),
<span style="color: #bbbbbb"> </span>Email<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">255</span>)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">UNIQUE</span>,
<span style="color: #bbbbbb"> </span>Phone<span style="color: #bbbbbb"> </span><span style="color:
#007020">VARCHAR</span>(<span style="color: #0000DD; font-weight: bold">15</span>)
);
<span style="color: #888888">-- Table for storing book transactions (issue/return)</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">TABLE</span><span style="color: #bbbbbb"> </span>Transactions<span
style="color: #bbbbbb"> </span>(
<span style="color: #bbbbbb"> </span>TransactionID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">PRIMARY</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">KEY</span><span style="color: #bbbbbb"> </span>AUTO_INCREMENT,
<span style="color: #bbbbbb"> </span>MemberID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span>,
<span style="color: #bbbbbb"> </span>BookID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span>,
<span style="color: #bbbbbb"> </span>IssueDate<span style="color: #bbbbbb"> </span><span style="color:
#007020">DATE</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">DEFAULT</span><span style="color: #bbbbbb"> </span>CURDATE(),
<span style="color: #bbbbbb"> </span>DueDate<span style="color: #bbbbbb"> </span><span style="color:
#007020">DATE</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">DEFAULT</span><span style="color: #bbbbbb"> </span>(DATE_ADD(CURDATE(),<span style="color: #bbbbbb">
</span><span style="color: #007020">INTERVAL</span><span style="color: #bbbbbb"> </span><span style="color:
#0000DD; font-weight: bold">14</span><span style="color: #bbbbbb"> </span><span style="color: #008800;
font-weight: bold">DAY</span>)),
<span style="color: #bbbbbb"> </span>ReturnDate<span style="color: #bbbbbb"> </span><span style="color:
#007020">DATE</span>,
<span style="color: #bbbbbb"> </span>Fine<span style="color: #bbbbbb"> </span><span style="color:
#007020">DECIMAL</span>(<span style="color: #0000DD; font-weight: bold">5</span>,<span style="color: #0000DD;
font-weight: bold">2</span>)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">DEFAULT</span><span style="color: #bbbbbb"> </span><span style="color: #0000DD; font-weight:
bold">0</span>,
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">FOREIGN</span><span
style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">KEY</span><span style="color:
#bbbbbb"> </span>(MemberID)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">REFERENCES</span><span style="color: #bbbbbb"> </span>Members(MemberID),
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">FOREIGN</span><span
style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">KEY</span><span style="color:
#bbbbbb"> </span>(BookID)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">REFERENCES</span><span style="color: #bbbbbb"> </span>Books(BookID)
);
<span style="color: #888888">-- Table for tracking fines</span>
<span style="color: #008800; font-weight: bold">CREATE</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">TABLE</span><span style="color: #bbbbbb"> </span>Fines<span
style="color: #bbbbbb"> </span>(
<span style="color: #bbbbbb"> </span>FineID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">PRIMARY</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">KEY</span><span style="color: #bbbbbb"> </span>AUTO_INCREMENT,
<span style="color: #bbbbbb"> </span>MemberID<span style="color: #bbbbbb"> </span><span style="color:
#007020">INT</span>,
<span style="color: #bbbbbb"> </span>Amount<span style="color: #bbbbbb"> </span><span style="color:
#007020">DECIMAL</span>(<span style="color: #0000DD; font-weight: bold">5</span>,<span style="color: #0000DD;
font-weight: bold">2</span>)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">NOT</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">NULL</span>,
<span style="color: #bbbbbb"> </span>Status<span style="color: #bbbbbb"> </span>ENUM(<span
style="background-color: #fff0f0">'Unpaid'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'Paid'</span>)<span style="color: #bbbbbb"> </span><span style="color:
#008800; font-weight: bold">DEFAULT</span><span style="color: #bbbbbb"> </span><span style="background-color:
#fff0f0">'Unpaid'</span>,
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">FOREIGN</span><span
style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">KEY</span><span style="color:
#bbbbbb"> </span>(MemberID)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">REFERENCES</span><span style="color: #bbbbbb"> </span>Members(MemberID)
);
<span style="color: #888888">-- Sample Data Insertion</span>
<span style="color: #008800; font-weight: bold">INSERT</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">INTO</span><span style="color: #bbbbbb"> </span>Books<span
style="color: #bbbbbb"> </span>(Title,<span style="color: #bbbbbb"> </span>Author,<span style="color: #bbbbbb">
</span>Publisher,<span style="color: #bbbbbb"> </span>YearPublished,<span style="color: #bbbbbb">
</span>ISBN,<span style="color: #bbbbbb"> </span>Quantity)<span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">VALUES</span>
(<span style="background-color: #fff0f0">'The Great Gatsby'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'F. Scott Fitzgerald'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'Scribner'</span>,<span style="color: #bbbbbb"> </span><span style="color:
#0000DD; font-weight: bold">1925</span>,<span style="color: #bbbbbb"> </span><span style="background-color:
#fff0f0">'9780743273565'</span>,<span style="color: #bbbbbb"> </span><span style="color: #0000DD; font-weight:
bold">5</span>),
(<span style="background-color: #fff0f0">'1984'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'George Orwell'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'Secker & Warburg'</span>,<span style="color: #bbbbbb"> </span><span
style="color: #0000DD; font-weight: bold">1949</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'9780451524935'</span>,<span style="color: #bbbbbb"> </span><span
style="color: #0000DD; font-weight: bold">3</span>);
<span style="color: #008800; font-weight: bold">INSERT</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">INTO</span><span style="color: #bbbbbb"> </span>Members<span
style="color: #bbbbbb"> </span>(Name,<span style="color: #bbbbbb"> </span>Email,<span style="color: #bbbbbb">
</span>Phone,<span style="color: #bbbbbb"> </span>Address)<span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">VALUES</span>
(<span style="background-color: #fff0f0">'John Doe'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'
[email protected]'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'1234567890'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'123 Main St'</span>),
(<span style="background-color: #fff0f0">'Jane Smith'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'
[email protected]'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'9876543210'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'456 Oak St'</span>);
<span style="color: #008800; font-weight: bold">INSERT</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">INTO</span><span style="color: #bbbbbb"> </span>Staff<span
style="color: #bbbbbb"> </span>(Name,<span style="color: #bbbbbb"> </span><span style="color: #008800;
font-weight: bold">Role</span>,<span style="color: #bbbbbb"> </span>Email,<span style="color: #bbbbbb">
</span>Phone)<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">VALUES</span>
(<span style="background-color: #fff0f0">'Alice Brown'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'Librarian'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'
[email protected]'</span>,<span style="color: #bbbbbb"> </span><span
style="background-color: #fff0f0">'1122334455'</span>);
<span style="color: #888888">-- Query to Issue a Book</span>
<span style="color: #008800; font-weight: bold">INSERT</span><span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">INTO</span><span style="color: #bbbbbb"> </span>Transactions<span
style="color: #bbbbbb"> </span>(MemberID,<span style="color: #bbbbbb"> </span>BookID)<span style="color:
#bbbbbb"> </span><span style="color: #008800; font-weight: bold">VALUES</span><span style="color: #bbbbbb">
</span>(<span style="color: #0000DD; font-weight: bold">1</span>,<span style="color: #bbbbbb"> </span><span
style="color: #0000DD; font-weight: bold">1</span>);
<span style="color: #888888">-- Query to Return a Book (including fine calculation)</span>
<span style="color: #008800; font-weight: bold">UPDATE</span><span style="color: #bbbbbb">
</span>Transactions<span style="color: #bbbbbb"> </span>
<span style="color: #008800; font-weight: bold">SET</span><span style="color: #bbbbbb"> </span>ReturnDate<span
style="color: #bbbbbb"> </span><span style="color: #333333">=</span><span style="color: #bbbbbb">
</span>CURDATE(),<span style="color: #bbbbbb"> </span>Fine<span style="color: #bbbbbb"> </span><span
style="color: #333333">=</span><span style="color: #bbbbbb"> </span>
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">CASE</span><span
style="color: #bbbbbb"> </span>
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">WHEN</span><span
style="color: #bbbbbb"> </span>CURDATE()<span style="color: #bbbbbb"> </span><span style="color:
#333333">></span><span style="color: #bbbbbb"> </span>DueDate<span style="color: #bbbbbb"> </span><span
style="color: #008800; font-weight: bold">THEN</span><span style="color: #bbbbbb">
</span>DATEDIFF(CURDATE(),<span style="color: #bbbbbb"> </span>DueDate)<span style="color: #bbbbbb">
</span><span style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #0000DD;
font-weight: bold">5</span><span style="color: #bbbbbb"> </span>
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">ELSE</span><span
style="color: #bbbbbb"> </span><span style="color: #0000DD; font-weight: bold">0</span><span style="color:
#bbbbbb"> </span>
<span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight: bold">END</span><span
style="color: #bbbbbb"> </span>
<span style="color: #008800; font-weight: bold">WHERE</span><span style="color: #bbbbbb">
</span>TransactionID<span style="color: #bbbbbb"> </span><span style="color: #333333">=</span><span
style="color: #bbbbbb"> </span><span style="color: #0000DD; font-weight: bold">1</span>;
<span style="color: #888888">-- Output Simulation</span>
<span style="color: #008800; font-weight: bold">SELECT</span><span style="color: #bbbbbb"> </span><span
style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">FROM</span><span style="color: #bbbbbb"> </span>Books;
<span style="color: #008800; font-weight: bold">SELECT</span><span style="color: #bbbbbb"> </span><span
style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">FROM</span><span style="color: #bbbbbb"> </span>Members;
<span style="color: #008800; font-weight: bold">SELECT</span><span style="color: #bbbbbb"> </span><span
style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">FROM</span><span style="color: #bbbbbb"> </span>Staff;
<span style="color: #008800; font-weight: bold">SELECT</span><span style="color: #bbbbbb"> </span><span
style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">FROM</span><span style="color: #bbbbbb"> </span>Transactions;
<span style="color: #008800; font-weight: bold">SELECT</span><span style="color: #bbbbbb"> </span><span
style="color: #333333">*</span><span style="color: #bbbbbb"> </span><span style="color: #008800; font-weight:
bold">FROM</span><span style="color: #bbbbbb"> </span>Fines;