【问题标题】:Why a can't connect my tables in MySQL?为什么无法在 MySQL 中连接我的表?
【发布时间】:2016-04-09 16:38:02
【问题描述】:

shippings 表结构 我想像这样连接到另一个表(我收到“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 引擎。但我有这个 sn-p 并且它有效:

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?

【问题讨论】:

    标签: php mysql sql phpmyadmin innodb


    【解决方案1】:

    通常,外键引用指向唯一键或主键。但是,对于 INNODB,此条件已放宽,如 documentation 中所述:

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

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

    【讨论】:

    • 你能告诉我具体需要做什么吗?
    • 我应该重新组织表的结构吗?
    • 我明白了。解决方法是: FOREIGN KEY (shipping_id, s_date) REFERENCES shipping(shipping_id, s_date)
    • @user3528865 。 . .那将是正确的外键关系。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2018-10-08
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多