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を試す可能性があります(それが質問に影響するかどうかはわかりません)。

そして最後に、問題は、からレコードを削除しようとすると、 MySQLがこの支払いタイプを含むtbl_payment_typeすべてのレコードを自動的に削除する原因になるのでしょうか?tbl_order

4

2 に答える 2

3

MyISAM は外部キーをサポートしていないため、このストレージ プロバイダーを使用している間は何も起こりません。

InnoDB は外部キーをサポートしており、デフォルトでは、外部一致がない場合に DELETE と UPDATES を制限します。この動作は、ON DELETE および ON UPDATE オプションを追加することで変更できます。MySQL Web サイトのFOREIGN KEY Constraintsを参照してください。

于 2012-04-13T10:22:26.327 に答える
1

fromDELETEを入力しようとするとエラーになります。payment_typetbl_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 に答える