--- Michael Stassen <[EMAIL PROTECTED]>
wrote:
>
> Mulugeta Maru wrote:
>
> > Hi Michael,
> >
> > I made some changes to the sql statments to create
> the
> > ENROLLS table as follows:
> >
> > CREATE TABLE ENROLLS
> > (
> > courseID SMALLINT NOT NULL,
> > sectionID SMALLINT NOT NULL,
> > studentID SMALLINT NOT NULL,
> > grade SMALLINT)TYPE=INNODB;
> ^^^^^^^^^^^^^
> You made one too many changes. Your error is now
> here. You've ended the
> CREATE TABLE statement when you weren't really done.
>
> > PRIMARY KEY(courseID,sectionID,studentID),
> > INDEX(courseID),
>
> This is not an error, but it is redundant. You
> don't need a separate index
> on CourseID, because it is the left-most (first)
> column in your PRIMARY KEY.
> Unneeded indexes waste space and slow INSERTs.
> See the manual for details
>
<http://dev.mysql.com/doc/mysql/en/Multiple-column_indexes.html>
> and
>
<http://dev.mysql.com/doc/mysql/en/MySQL_indexes.html>.
>
> > FOREIGN KEY(courseID) REFERENCES
> COURSES(courseID)
> > ON UPDATE CASCADE ON DELETE CASCADE,
> > INDEX(sectionID),
> > FOREIGN KEY(sectionID) REFERENCES
> SECTIONS(sectionID)
> > ON UPDATE CASCADE ON DELETE CASCADE,
> > INDEX(studentID),
> > FOREIGN KEY(studentID) REFERENCES
> STUDENTS(studentID)
> > ON UPDATE CASCADE ON DELETE CASCADE
> > )TYPE=INNODB;
>
> Change this to
>
> CREATE TABLE ENROLLS
> (
> courseID SMALLINT NOT NULL,
> sectionID SMALLINT NOT NULL,
> studentID SMALLINT NOT NULL,
> grade SMALLINT,
> PRIMARY KEY(courseID,sectionID,studentID),
> FOREIGN KEY(courseID) REFERENCES
> COURSES(courseID)
> ON UPDATE CASCADE ON DELETE CASCADE,
> INDEX(sectionID),
> FOREIGN KEY(sectionID) REFERENCES
> SECTIONS(sectionID)
> ON UPDATE CASCADE ON DELETE CASCADE,
> INDEX(studentID),
> FOREIGN KEY(studentID) REFERENCES
> STUDENTS(studentID)
> ON UPDATE CASCADE ON DELETE CASCADE
> )TYPE=INNODB;
>
> > The error message is as follows:
> > ERROR 1064 at line 38: You have an error in your
> SQL
> > syntax; check the manual that corresponds to your
> > MySQL server version for the right syntax to use
> near
> > 'PRIMARY KEY (countID, sectionID, studentID),
> > INDEX(courseID),
> > FOREIGN KEY(courseID' at line 1
> >
> > I do not know what wrong with my syntax. Please
> help.
> > I am using MySQL version 4.1.3B.
>
> Yes, your formatting choices make it hard to see
> errors. You should
> consider using indentation and line breaks to
> logically organize your
> queries for readability, and you might consider
> using something other than
> all caps for table names so as to distinguish them
> from SQL. There are two
> benefits to this: First, there are several experts
> on the list who won't
> read and respond to a message where the query is
> difficult to read. In
> other words, you improve your chances of getting
> useful help if you make it
> easy for us to read your queries. Second, you may
> find that formatting
> helps you catch problems yourself, without having to
> resort to the list.
> Just a suggestion.
>
> > Regards,
> >
> > Maru
>
> Michael
>
I removed the index and still get the following error
message:
The error message is as follows:
ERROR 1064 at line 38: You have an error in your SQL
syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use
near 'PRIMARY KEY (countID, sectionID, studentID),
FOREIGN KEY(courseID) REFERENCES COUR' at line 1
Any fruther thought on this error.
As you can see from the sql statement the three fields
courseID,sectionID, studentID are primery keys in
tables COURSES, SECTIONS, and STUDENTS respectively.
What I am trying to do is to make the three fields
together to be primary key in the ENROLL table and to
make each of them foreign keys. At the same time I
would like also to have cascade update and delete.
Regards,
Maru
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]