2012-02-02 2 views
2
create table Machine 
(
Machine_ID int primary key, 
Machine_Name varchar(30) 
Machine_Title varchar(30) 
) 
create table Part 
(
Part_ID int primary key, 
Part_Name varchar(30), 
Part_Description varchar(30) 
) 

//How do I make this table below? 
create table Machine-Part 
(
    Machine_ID int foreign key references (Machine.Machine_ID), 
    Part_ID int foreign key references (Part.Part_ID) 
    Factory_Note varchar(30); 
) 

Mysql жалуется, что есть проблема с синтаксисом?Как создать таблицу с двумя первичными ключами из двух внешних ключей?

Желаемый результат: таблица «Machine-Part» использует «Machine_ID» & «Part_ID» как первичные ключи (которые являются как внешними ключами).

ответ

7

Если объявить ограничение отдельно (таблица уровень), он делает больше сена как таковые

create table Machine-Part 
(
    Machine_ID int NOT NULL , 
    Part_ID int NOT NULL , 
    Factory_Note varchar(30) NULL, 

    PRIMARY KEY (Machine_ID, Part_ID), 
    UNIQUE INDEX (Part_ID, Machine_ID), 
    foreign key (Machine_ID) references (Machine.Machine_ID), 
    foreign key (Part_ID) references (Part.Part_ID) 
) 

таблицы Link почти всегда нужен обратный индекс слишком

2

Что-то вроде этого -

CREATE TABLE Machine(
    Machine_ID INT PRIMARY KEY, 
    Machine_Name VARCHAR(30), 
    Machine_Title VARCHAR(30) 
) 
ENGINE = INNODB; 

CREATE TABLE Part(
    Part_ID INT PRIMARY KEY, 
    Part_Name VARCHAR(30), 
    Part_Description VARCHAR(30) 
) 
ENGINE = INNODB; 

create table `Machine-Part`(
    Machine_ID int, 
    Part_ID int, 
    Factory_Note varchar(30), 
    CONSTRAINT fk_Machine_ID FOREIGN KEY (Machine_ID) REFERENCES Machine(Machine_ID), 
    CONSTRAINT fk_Part_ID FOREIGN KEY (Part_ID) REFERENCES Part(Part_ID) 
) 
ENGINE = INNODB; 

Вы можете найти всю информацию на этих страницах:

+0

что делает ENGINE = InnoDB; делать/в виду? – stackoverflow

+0

В настоящее время только двигатель INNODB поддерживает внешние ключи. Я указал это значение явно. – Devart

+0

Используйте эти запросы для просмотра механизма хранения по умолчанию для сервера MySQL: SHOW VARIABLES LIKE 'default_storage_engine'; или SHOW VARIABLES LIKE 'table_type'; – Devart

 Смежные вопросы

  • Нет связанных вопросов^_^