MySQL Tutorial
Create the Publishers table, with primary auto-increment key PublisherID
CREATE TABLE Publishers
(
publisherID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
publisherName VARCHAR (200)
);
Add some data
INSERT INTO Publishers (publisherName) VALUES ("Prentice Hall");
INSERT INTO Publishers (publisherName) VALUES ("Penguin");
Show what is added
SELECT * FROM Publishers;
# publisherID publisherName
1 1 Prentice Hall
2 2 Penguin
Create Authors table
CREATE TABLE Authors
(
authorID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR (200),
lastName VARCHAR (200)
);
Add some data
INSERT INTO Authors (firstName, lastName) VALUES ("Harvey", "Deitel");
INSERT INTO Authors (firstName, lastName) VALUES ("Ray", "Stoneham");
Create Titles table
CREATE TABLE Titles
(
isbn VARCHAR (20) NOT NULL PRIMARY KEY,
title VARCHAR (200),
editionNumber VARCHAR (10),
description VARCHAR (200),
publisherID INT,
copyright INT,
imagefile VARCHAR (200),
price FLOAT (6,2)
);
Add some data
INSERT INTO Titles
(isbn, title, editionNumber, description, publisherID, copyright, imagefile, price)
VALUES
("0130125075", "Java How to Program (Java 2)", "2", "Learn to program in the Java
programming language", 1, 2008, "java.jpg", 69.95);
Create AuthorISBN table with composite key
CREATE TABLE AuthorISBN
(
isbn VARCHAR (20),
authorID INT,
PRIMARY KEY (isbn, authorid)
);
Add some data
INSERT INTO AuthorISBN(isbn, authorid ) VALUES ("0130125075", 1);
View table structure
DESCRIBE AuthorISBN;
# Field Type Null Key Default Extra
1 isbn varchar(20) NO PRI
2 authorID int(11) NO PRI 0
Output data from linked tables
SELECT Titles.title, Titles.isbn, Authors.firstName, Authors.lastName,
Titles.copyright, Publishers.publisherName
FROM
(Publishers INNER JOIN Titles ON Publishers.publisherID = Titles.publisherID)
INNER JOIN
(Authors INNER JOIN AuthorISBN ON Authors.authorid = AuthorISBN.authorid)
ON Titles.isbn = AuthorISBN.isbn
ORDER BY Titles.title;
# title isbn firstName lastName copyright publisherName
Java How to
1 0130125075 Harvey Deitel 2008 Prentice Hall
Program (Java 2)
Delete all data from a table
DELETE FROM authorISBN;
NOTE: You will not be asked to confirm
Remove tables from the database
DROP TABLE authorISBN;
DROP TABLE Titles;
NOW ADD REFERENTIAL INTEGRITY
Create Titles table
CREATE TABLE Titles
(
isbn VARCHAR (20) NOT NULL PRIMARY KEY,
title VARCHAR (200),
editionNumber VARCHAR (10),
description VARCHAR (200),
publisherID INT UNSIGNED,
FOREIGN KEY (publisherID) REFERENCES Publishers (publisherID),
copyright INT,
imagefile VARCHAR (200),
price FLOAT (6,2)
) TYPE = INNODB;
Create authorISBN table with composite key and Referential Integrity
CREATE TABLE authorISBN
(
isbn varchar(20),
authorid INT UNSIGNED,
FOREIGN KEY (isbn) REFERENCES Titles (isbn),
FOREIGN KEY (Authorid) REFERENCES Authors (AuthorID),
PRIMARY KEY (isbn, authorid)
) TYPE = INNODB;
DESCRIBE Titles;
# Field Type Null Key Default Extra
1 isbn varchar(20) NO PRI
2 title varchar(200) YES
3 editionNumber varchar(10) YES
# Field Type Null Key Default Extra
4 description varchar(200) YES
5 publisherID int(10) unsigned YES MUL
6 copyright int(11) YES
7 imagefile varchar(200) YES
8 price float(6,2) YES
Add some data
INSERT INTO Titles
(isbn, title, editionNumber, description, publisherID, copyright, imagefile, price)
VALUES
("0130125075", "Java How to Program (Java 2)", "2", "Learn to program in the Java
programming language", 1, 2008, "java.jpg", 69.95);
Try adding duplicate primary key data
INSERT INTO Titles
(isbn, title, editionNumber, description, publisherID, copyright, imagefile, price)
VALUES
("0130125075", " (Java 2)", "2", "Learn to ", 1, 2008, "java.jpg", 69.95);
Error 1062:Duplicate entry '0130125075' for key 1
Try adding inconsistent data
INSERT INTO Titles
(isbn, title, editionNumber, description, publisherID, copyright, imagefile, price)
VALUES
("1234567890", "Java How to Program (Java 2)", "5", "Learn to program in the Java
programming language", 10, 2008, "java.jpg", 69.95);
Error 1452:Cannot add or update a child row: a foreign key constraint fails
(`mdb_sr65/titles`, CONSTRAINT `titles_ibfk_1` FOREIGN KEY (`publisherID`)
REFERENCES `publishers` (`publisherID`))
Try deleting the primary key when there are child records
DELETE FROM Publishers;
Error 1451:Cannot delete or update a parent row: a foreign key constraint fails
(`mdb_sr65/titles`, CONSTRAINT `titles_ibfk_1` FOREIGN KEY (`publisherID`)
REFERENCES `publishers` (`publisherID`))
A well designed database with entity and referential integrity is designed to minimise
the GIGO effect:
GIGO: Garbage In = Garbage Out