2008-10-27 5 views
2

У меня есть эти два CREATE TABLE заявления:Как добавить внешний ключ при создании новой таблицы?

CREATE TABLE GUEST(id int(15) not null auto_increment PRIMARY KEY, GuestName char(25) not null); 

CREATE TABLE PAYMENT(id int(15)not null auto_increment Foriegn Key(id) references GUEST(id), BillNr int(15) not null); 

Что такое проблема во втором заявлении? Он не создал новую таблицу.

+0

Вы можете заменить Foriegn на внешней для начала;) – Luk

ответ

0

Убедитесь, что вы используете движок InnoDB для базы данных или для обеих таблиц. Из ведения MySQL:

Для отличных от InnoDB двигателей хранения, сервер MySQL разбирает FOREIGN KEY синтаксис CREATE TABLE заявления, но не используйте и не храните его.

1

Я предлагаю иметь уникальный ключ для таблицы платежей. На его стороне внешний ключ не должен быть auto_increment, поскольку он относится к уже существующему ключу.

CREATE TABLE GUEST(
    id int(15) not null auto_increment PRIMARY KEY, 
    GuestName char(25) not null 
) ENGINE=INNODB; 

CREATE TABLE PAYMENT(
    id int(15)not null auto_increment, 
    Guest_id int(15) not null, 
    INDEX G_id (Guest_id), 
    Foreign Key(Guest_id) references GUEST(id), 
    BillNr int(15) not null 
) ENGINE=INNODB; 
7

Ответ на ваш вопрос почти такой же, как и ответ на this one.

Необходимо указать в таблице, содержащей внешний ключ, имя таблицы, содержащей первичный ключ, и имя поля первичного ключа (с использованием «ссылок»).

This содержит код, показывающий, как создавать внешние ключи самостоятельно, и в CREATE TABLE.

Вот один из самых простых примеров из тех, которые:

CREATE TABLE parent (id INT NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=INNODB; 
CREATE TABLE child (id INT, parent_id INT, 
    INDEX par_ind (parent_id), 
    FOREIGN KEY (parent_id) REFERENCES parent(id) 
    ON DELETE CASCADE 
) ENGINE=INNODB; 
-1

Там должно быть пространство между int(15) и not null

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

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