Как добавить внешний ключ при создании новой таблицы? - PullRequest
8 голосов
/ 27 октября 2008

У меня есть два 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
  Foreign Key(id) references GUEST(id),
  BillNr int(15) not null
);

В чем проблема во втором утверждении? Он не создал новую таблицу.

Ответы [ 5 ]

11 голосов
/ 27 октября 2008

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

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

В этом есть некоторый код, показывающий, как создавать внешние ключи самостоятельно и в 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;
3 голосов
/ 27 октября 2008

Я предлагаю предложить уникальный ключ для таблицы выплат. С другой стороны, внешний ключ не должен быть 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;
0 голосов
/ 26 апреля 2019
create table course(ccode int(2) primary key,course varchar(10));

create table student1(rollno int(5) primary key,name varchar(10),coursecode int(2) not 
null,mark1 int(3),mark2 int(3),foreign key(coursecode) references course(ccode));
0 голосов
/ 19 марта 2011

Между int(15) и not null

должно быть расстояние
0 голосов
/ 27 октября 2008

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

Для систем хранения, кроме InnoDB, MySQL Server анализирует FOREIGN KEY синтаксис в операторах CREATE TABLE, но не использует и не хранит его.

...