0

I am currently using phpmyadmin to create many different tables, but this one seems to be causing a problem. Could this be an error with this part of the code, or possibly from something that references Staff further down in my code?

SQL query:

CREATE TABLE Staff(

Staff_ID INTEGER( 5 ) PRIMARY KEY AUTO_INCREMENT ,
Local_ID INTEGER( 5 ) ,
First_name VARCHAR( 20 ) NOT NULL ,
Last_name VARCHAR( 20 ) NOT NULL ,
Address_line_1 VARCHAR( 30 ) NOT NULL ,
Address_line_2 VARCHAR( 30 ) NOT NULL ,
City VARCHAR( 20 ) NOT NULL ,
Post_Code VARCHAR( 8 ) NOT NULL ,
Email VARCHAR( 30 ) NOT NULL ,
Telephone INTEGER NOT NULL ,
Date_employed DATE,
Salary DECIMAL,
Sales_ID INTEGER( 5 ) ,
Manager_ID INTEGER( 5 ) ,
Development_ID INTEGER( 5 ) ,
FOREIGN KEY ( Local_ID ) REFERENCES LocalOffice( Local_ID ) ,
FOREIGN KEY ( Sales_ID ) REFERENCES Sales_Advisors( Sales_ID ) ,
FOREIGN KEY ( Manager_ID ) REFERENCES Site_Manager( Manager_ID ) ,
FOREIGN KEY ( Development_ID ) REFERENCES Development( Development_ID )
);

MySQL said:

1005 - Can't create table 'h_h.staff' (errno: 150) (Details...)

Community
  • 1
  • 1
Luke Clifford
  • 112
  • 12

2 Answers2

2

From error, it is pretty much clear that this error is due to foreign key constrains. Can you try disabling foreign key constrain, then create your table and finally enable it back?

SET foreign_key_checks = 0;

CREATE TABLE Staff(

Staff_ID INTEGER( 5 ) PRIMARY KEY AUTO_INCREMENT ,
Local_ID INTEGER( 5 ) ,
First_name VARCHAR( 20 ) NOT NULL ,
Last_name VARCHAR( 20 ) NOT NULL ,
Address_line_1 VARCHAR( 30 ) NOT NULL ,
Address_line_2 VARCHAR( 30 ) NOT NULL ,
City VARCHAR( 20 ) NOT NULL ,
Post_Code VARCHAR( 8 ) NOT NULL ,
Email VARCHAR( 30 ) NOT NULL ,
Telephone INTEGER NOT NULL ,
Date_employed DATE,
Salary DECIMAL,
Sales_ID INTEGER( 5 ) ,
Manager_ID INTEGER( 5 ) ,
Development_ID INTEGER( 5 ) ,
FOREIGN KEY ( Local_ID ) REFERENCES LocalOffice( Local_ID ) ,
FOREIGN KEY ( Sales_ID ) REFERENCES Sales_Advisors( Sales_ID ) ,
FOREIGN KEY ( Manager_ID ) REFERENCES Site_Manager( Manager_ID ) ,
FOREIGN KEY ( Development_ID ) REFERENCES Development( Development_ID )
);

SET foreign_key_checks = 1;
Amit
  • 1,365
  • 8
  • 15
  • How many problems is this likely to causer later on though? – Luke Clifford Apr 29 '13 at 06:51
  • @LukeClifford see http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_foreign_key_checks – Sean Apr 29 '13 at 07:03
  • How about: This appears to work: `INSERT INTO Staff VALUES (null, null, 'Sean', 'D', 'UP62@mac.uk', '07411557877', '2012-10-08', 80000.00,null,null,null);` – Luke Clifford Apr 29 '13 at 07:15
  • So I've seen the links you have sent me. And they have worked, but I think by using this work around it's meant that i can't use simply INSERT statements: `NSERT INTO Staff VALUES (null, null, 'Sean', 'D', 'UP62@mac.uk', '07411557877', '2012-10-08', 80000.00,null,null,null);` – Luke Clifford Apr 29 '13 at 07:20
0

I think you should create index on foreign keys like this

...

Development_ID INTEGER( 5 ) ,
INDEX Local_ID,
INDEX Sales_ID,
INDEX Manager_ID,
INDEX DEvelopment_ID,
FOREIGN KEY ( Local_ID ) REFERENCES LocalOffice( Local_ID ) ,
FOREIGN KEY ( Sales_ID ) REFERENCES Sales_Advisors( Sales_ID ) ,
FOREIGN KEY ( Manager_ID ) REFERENCES Site_Manager( Manager_ID ) ,
FOREIGN KEY ( Development_ID ) REFERENCES Development( Development_ID )
);
Amir
  • 4,089
  • 4
  • 16
  • 28