0

我有一个带有预设值的“查找”表(被告知它比 ENUM 更好)

CREATE TABLE tbl_payment_type (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    description VARCHAR(25)
);
INSERT INTO tbl_payment_type
    (description)
VALUES
    ('PAYPAL'),
    ('DEBIT CARD'),
    ('CREDIT CARD'),
    ('CASH ON DELIVERY');

现在,我的每个订单都包含一种付款类型。

CREATE TABLE tbl_order (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    ...
    payment_type INT,
    FOREIGN KEY(payment_type) REFERENCES tbl_payment_type(id)
) AUTO_INCREMENT = 1000;

我目前正在使用 MyISAM,但将来可能会尝试 InnoDB(我不确定这是否会影响问题)。

最后,问题是,如果我尝试从 中删除记录tbl_payment_type,是否会导致 MySQL 自动删除tbl_order包含此付款类型的所有记录?

4

2 回答 2

3

MyISAM 不支持外键,因此在使用此存储提供程序时不会发生任何事情。

InnoDB 支持外键,默认情况下它将限制 DELETE 和 UPDATES 没有外匹配。可以通过添加 ON DELETE 和 ON UPDATE 选项来更改此行为。请参阅MySQL 网站上的FOREIGN KEY Constraints 。

于 2012-04-13T10:22:26.327 回答
1

DELETE如果您尝试输入payment_typefrom ,它会给您一个错误tbl_payment_type

delete from `test`.`tbl_payment_type` where `id`='2'

错误:1451 无法删除或更新父行:外键约束失败 ( test. tbl_order, CONSTRAINT tbl_order_ibfk_1 FOREIGN KEY ( payment_type) REFERENCES tbl_payment_type( id))

于 2012-04-13T10:26:34.533 回答