3

次のデータを使用して2つのテーブルを作成しました

ここに画像の説明を入力してください

脚本:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)ENGINE=InnoDB;

CREATE TABLE Orders
(
O_Id int,
OrderNo int,
P_Id int NOT NULL,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE=InnoDB;

INSERT INTO Persons VALUES
(1, 'Last', 'First', 'Address', 'City');

INSERT INTO Orders VALUES
(1, 2, 1);

DELETE FROM Persons WHERE P_Id = 1
select * from Orders;

この例をMySQLワークベンチに実装しました(w3schoolsからの例)。

これで、personsテーブルの最初の行を削除すると、Ordersテーブルの対応する行も削除されることになります。つまり、最後の行です。しかし、それは削除されていません。

誰かが私がここで欠けているものを教えてもらえますか?

それでも、注文テーブルの行が表示されます。

4

1 に答える 1

3

コメントで述べられているように、あなたはオンにする必要がありますforeign_key_checks

SET foreign_key_checks = 'ON'

1(デフォルト)に設定すると、InnoDBテーブルの外部キー制約がチェックされます。0に設定すると、無視されます。

ドキュメントを参照してください

于 2013-02-23T23:20:36.863 に答える