为什么无法在MySQL中连接我的表?

时间:2016-04-09 16:38:03

标签: php mysql sql phpmyadmin innodb

shippings表结构 shippings table structure 我想连接到另一个这样的表(我得到" 1215错误"):

CREATE TABLE goods_and_shippings (
good_id INT NOT NULL,
s_date DATE NOT NULL,
shipping_id INT NOT NULL,
PRIMARY KEY (good_id),
FOREIGN KEY (s_date) REFERENCES shippings(s_date)

连接列具有相同的数据类型(DATE和NOT NULL),所有表都使用InnoDB引擎。但我有这个片段,它有效:

CREATE TABLE goods_and_shippings (
good_id INT NOT NULL,
s_date DATE NOT NULL,
shipping_id INT NOT NULL,
PRIMARY KEY (good_id),
FOREIGN KEY (shipping_id) REFERENCES shippings(shipping_id)

目前所有表格都是空的。以下是创建发货的查询:

CREATE TABLE shippings (
shipping_id INT NOT NULL,
s_date DATE NOT NULL,
driver_id INT NOT NULL,
start_place VARCHAR(50) NOT NULL,
end_place VARCHAR(50) NOT NULL,
car_id INT NOT NULL,
price DECIMAL(5,2) NOT NULL,
PRIMARY KEY (shipping_id, s_date)

此处改变了我之后使用过:

ALTER TABLE shippings ADD CONSTRAINT fk_car_id FOREIGN KEY (car_id) REFERENCES cars(car_id);
ALTER TABLE shippings ADD CONSTRAINT fk_driver_id FOREIGN KEY (driver_id) REFERENCES drivers(driver_id);

我的查询有什么问题?如何解决这个问题并连接goods_and_shippings.s_date和shippings.s_date?

1 个答案:

答案 0 :(得分:0)

通常,外键引用是唯一键或主键。但是,如documentation

中所述,INNODB放宽了这一条件
  

InnoDB允许外键引用任何索引列或组   列。但是,在引用的表中,必须有一个索引   其中引用的列被列为的第一列   同样的顺序。

因此,您可以对shipping_id进行外部引用,因为它是主键中的第一个键,但不是迄今为止。但是,我建议您设置外键关系以完成主键。并且,我通常在所有表中都有一个自动递增的主键,以促进这种关系。