Hello Programmers, Thank you for the kind advice, I have another small problem with MySQL I'd like to investigate, All I get is this:
ERROR 1005 at line 47: Can't create table '.\company\#sql-40c_4.frm' (errno: 150) What I attempt to do is this: C:\mysql\bin>mysql -u elmasri -pnavathe -vvv company < Company_08.sql > out.txt ERROR 1005 at line 47: Can't create table '.\company\#sql-40c_4.frm' (errno: 150 ) input code is this as we all know: USE company; DROP TABLE IF EXISTS EMPLOYEE; CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, MINIT CHAR, LNAME VARCHAR(15) NOT NULL, SSN CHAR(9) NOT NULL, BDATE DATE, ADDRESS VARCHAR(30), SEX CHAR, SALARY DECIMAL(10,2), SUPERSSN CHAR(9), DNO INT NOT NULL DEFAULT 1, PRIMARY KEY (SSN), INDEX (SUPERSSN), INDEX (DNO) )TYPE = INNODB; DESCRIBE EMPLOYEE; DROP TABLE IF EXISTS DEPARTMENT; CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL DEFAULT '888665555', MGRSTARTDATE DATE, PRIMARY KEY (DNUMBER), UNIQUE (DNAME), INDEX (MGRSSN) )TYPE = INNODB; DESCRIBE DEPARTMENT; ALTER TABLE EMPLOYEE ADD FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE EMPLOYEE # here is the buggy code ADD FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET DEFAULT ON UPDATE CASCADE; ALTER TABLE DEPARTMENT ADD FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET DEFAULT ON UPDATE CASCADE ; SHOW CREATE TABLE EMPLOYEE; SHOW CREATE TABLE DEPARTMENT; SHOW TABLE STATUS FROM company LIKE "EMPLOYEE"; SHOW TABLE STATUS FROM company LIKE "DEPARTMENT"; Output is this: -------------- DROP TABLE IF EXISTS EMPLOYEE -------------- Query OK, 0 rows affected (0.02 sec) -------------- CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, MINIT CHAR, LNAME VARCHAR(15) NOT NULL, SSN CHAR(9) NOT NULL, BDATE DATE, ADDRESS VARCHAR(30), SEX CHAR, SALARY DECIMAL(10,2), SUPERSSN CHAR(9), DNO INT NOT NULL DEFAULT 1, PRIMARY KEY (SSN), INDEX (SUPERSSN), INDEX (DNO) )TYPE = INNODB -------------- Query OK, 0 rows affected (0.00 sec) -------------- DESCRIBE EMPLOYEE -------------- +----------+---------------+-------------------+------+-----+---------+- ------+ | Field | Type | Collation | Null | Key | Default | Extra | +----------+---------------+-------------------+------+-----+---------+- ------+ | FNAME | varchar(15) | latin1_swedish_ci | | | | | | MINIT | char(1) | latin1_swedish_ci | YES | | NULL | | | LNAME | varchar(15) | latin1_swedish_ci | | | | | | SSN | varchar(9) | latin1_swedish_ci | | PRI | | | | BDATE | date | latin1_swedish_ci | YES | | NULL | | | ADDRESS | varchar(30) | latin1_swedish_ci | YES | | NULL | | | SEX | char(1) | latin1_swedish_ci | YES | | NULL | | | SALARY | decimal(10,2) | binary | YES | | NULL | | | SUPERSSN | varchar(9) | latin1_swedish_ci | YES | MUL | NULL | | | DNO | int(11) | binary | | MUL | 1 | | +----------+---------------+-------------------+------+-----+---------+- ------+ 10 rows in set (0.00 sec) -------------- DROP TABLE IF EXISTS DEPARTMENT -------------- Query OK, 0 rows affected (0.00 sec) -------------- CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL DEFAULT '888665555', MGRSTARTDATE DATE, PRIMARY KEY (DNUMBER), UNIQUE (DNAME), INDEX (MGRSSN) )TYPE = INNODB -------------- Query OK, 0 rows affected (0.02 sec) -------------- DESCRIBE DEPARTMENT -------------- +--------------+-------------+-------------------+------+-----+--------- --+-------+ | Field | Type | Collation | Null | Key | Default | Extra | +--------------+-------------+-------------------+------+-----+--------- --+-------+ | DNAME | varchar(15) | latin1_swedish_ci | | UNI | | | | DNUMBER | int(11) | binary | | PRI | 0 | | | MGRSSN | varchar(9) | latin1_swedish_ci | | MUL | 888665555 | | | MGRSTARTDATE | date | latin1_swedish_ci | YES | | NULL | | +--------------+-------------+-------------------+------+-----+--------- --+-------+ 4 rows in set (0.00 sec) -------------- ALTER TABLE EMPLOYEE ADD FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) ON DELETE SET NULL ON UPDATE CASCADE -------------- Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 -------------- ALTER TABLE EMPLOYEE ADD FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER) ON DELETE SET DEFAULT ON UPDATE CASCADE -------------- Bye Please , what else can I do ? Alter Table add foreign key runs fine, alter table X add foreign key referencec Y with X!=Y simply woun't compile ! All I can get is alter table X add foreign key referencec X No mutual references between any two different tables, Or does it exist another solution or workaround ? Yours Sincerely Morten Gulbrandsen The one who loves MySQL ;-) -----Ursprüngliche Nachricht----- Von: Fred van Engen [mailto:[EMAIL PROTECTED] Gesendet: Mittwoch, 13. August 2003 15:36 An: Morten Gulbrandsen Cc: 'Victoria Reznichenko'; [EMAIL PROTECTED] Betreff: Re: mutual declarations produce Error 1064 Morten, In your extremely long mail, I think I managed to find your question and removed all other stuff. On Wed, Aug 13, 2003 at 03:18:26PM +0200, Morten Gulbrandsen wrote: > mysql> > mysql> # from now on the coding causes trouble > mysql> > mysql> ALTER TABLE EMPLOYEE > -> FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) > -> ON DELETE SET NULL > -> ON UPDATE CASCADE; > ERROR 1064: You have an error in your SQL syntax. Check the manual that > corresp > onds to your MySQL server version for the right syntax to use near > 'FOREIGN KEY > (SUPERSSN) REFERENCES EMPLOYEE(SSN) > ON DELETE SET > mysql> 6.5.4 ALTER TABLE Syntax ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification ...] alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER column_name ] | ADD [COLUMN] (create_definition, create_definition,...) | ADD INDEX [index_name] (index_col_name,...) | ADD PRIMARY KEY (index_col_name,...) | ADD UNIQUE [index_name] (index_col_name,...) | ADD FULLTEXT [index_name] (index_col_name,...) | ADD [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name create_definition [FIRST | AFTER column_name] | MODIFY [COLUMN] create_definition [FIRST | AFTER column_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP INDEX index_name | DISABLE KEYS | ENABLE KEYS | RENAME [TO] new_tbl_name | ORDER BY col | table_options So what it clearly tells you, is to use this (note the 'ADD'): mysql> ALTER TABLE EMPLOYEE -> ADD FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN) -> ON DELETE SET NULL -> ON UPDATE CASCADE; Regards, Fred. -- Fred van Engen XB Networks B.V. email: [EMAIL PROTECTED] Televisieweg 2 tel: +31 36 5462400 1322 AC Almere fax: +31 36 5462424 The Netherlands -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]