I have read Database system concepts, 6th edition, Silberschatz. I'm going to implement the university database system shown in chapter 2 on OS X on MySQL. But I have a trouble with creating the table course
. the table department
looks like
mysql> select * from department -> ; +------------+----------+-----------+ | dept_name | building | budget | +------------+----------+-----------+ | Biology | Watson | 90000.00 | | Comp. Sci. | Taylor | 100000.00 | | Elec. Eng. | Taylor | 85000.00 | | Finance | Painter | 120000.00 | | History | Painter | 50000.00 | | Music | Packard | 80000.00 | | Physics | Watson | 70000.00 | +------------+----------+-----------+ mysql> show columns from department -> ; +-----------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------------+------+-----+---------+-------+ | dept_name | varchar(20) | NO | PRI | | | | building | varchar(15) | YES | | NULL | | | budget | decimal(12,2) | YES | | NULL | | +-----------+---------------+------+-----+---------+-------+
Creating the table course
causes the following error.
mysql> create table course -> (course_id varchar(7), -> title varchar (50), -> dept_name varchar(20), -> credits numeric(2,0), -> primary key(course_id), -> foreign key (dept_name) references department); ERROR 1215 (HY000): Cannot add foreign key constraint
after searching google for foreign key constraint, I have just learned that the word 'foreign key constraint' indicates that data from foreign key column in the table course
must exist in primary key column in the table department
. But I should have met this error when inserting data.
If not, why does author make me execute that SQL statement?
If I really execute erroneous SQL statement, Does I have to designate dept_name
in course table as foreign key after inserting some data?
EDIT : typing set foreign_key_checks=0
into mysql>
does not fix the error.
------------------------ LATEST FOREIGN KEY ERROR ------------------------ 2013-09-21 16:02:20 132cbe000 Error in foreign key constraint of table university/course: foreign key (dept_name) references department): Syntax error close to: ) mysql> set foreign_key_checks=0 -> ; Query OK, 0 rows affected (0.00 sec) mysql> create table course -> (course_id varchar(7), -> title varchar(50), -> dept_name varchar(20), -> credits numeric(2,0), -> primary key(course_id), -> foreign key (dept_name) references department); ERROR 1215 (HY000): Cannot add foreign key constraint
The usual cause are generally a mismatch in the type of the column of the primary table and the foreign table. It can also be a mismatch in the Engine type of two tables i.e. MyISAM or InnoDB. Datatype both columns should have same datatype. int(11) on one table and smallint(5) on another will cause problem.
The error message itself showing there is a foreign key constraint error, which means you are deleting a parent table where the child table contains the Primary table identifier as a foreign key. To avoid this error, you need to delete child table records first and after that the parent table record.
When you get this vague error message, you can find out the more specific error by running
SHOW ENGINE INNODB STATUS;
The most common reasons are that when creating a foreign key, both the referenced field and the foreign key field need to match:
Another cause of this error is:
You have defined a SET NULL condition though some of the columns are defined as NOT NULL.
The syntax of FOREIGN KEY
for CREATE TABLE
is structured as follows:
FOREIGN KEY (index_col_name) REFERENCES table_name (index_col_name,...)
So your MySQL DDL should be:
create table course ( course_id varchar(7), title varchar(50), dept_name varchar(20), credits numeric(2 , 0 ), primary key (course_id), FOREIGN KEY (dept_name) REFERENCES department (dept_name) );
Also, in the department
table dept_name
should be VARCHAR(20)
More information can be found in the MySQL documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With