Это дальнейшее обсуждение этого вопроса:
Почему все еще можно вставить внешний ключ, который не существует?
Это работает:
CREATE TABLE products (
id integer unsigned auto_increment primary key
) ENGINE=INNODB;
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned,
quantity integer,
INDEX product_id_idx (product_id),
FOREIGN KEY (product_id) REFERENCES products (id)
) ENGINE=INNODB;
Но эти 2 не:
A
CREATE TABLE products (
id integer unsigned auto_increment primary key
) ENGINE=INNODB;
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned REFERENCES products (id),
quantity integer,
INDEX product_id_idx (product_id)
);
B
CREATE TABLE products (
id integer auto_increment primary key
) ENGINE=INNODB;
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned,
quantity integer,
INDEX product_id_idx (product_id),
FOREIGN KEY (product_id) REFERENCES products (id)
) ENGINE=INNODB;
Для B это потому, что integer primary key
совпадает с integer unsigned primary key
Можете ли вы объяснить, почему A и B не работают?