📜  在删除外键时删除其他表中的相应行 (1)

📅  最后修改于: 2023-12-03 15:23:30.943000             🧑  作者: Mango

在删除外键时删除其他表中的相应行

在数据库中使用外键(foreign key)时,常常需要在删除主表中的某一行时,同时删除在其他表中与之相关联的行。这就需要在定义外键时设置相应的onDelete选项。本文将介绍如何在MySQL和PostgreSQL中实现在删除外键时删除其他表中的相应行。

MySQL中的外键

在MySQL中,可以使用以下语法定义外键:

CREATE TABLE Orders (
  OrderID int NOT NULL,
  CustomerID int,
  ...
  PRIMARY KEY (OrderID),
  CONSTRAINT FK_CustomerOrders FOREIGN KEY (CustomerID)
    REFERENCES Customers(CustomerID)
);

在上述语法中,CONSTRAINT FK_CustomerOrders FOREIGN KEY (CustomerID)表示定义了名为FK_CustomerOrders的外键,它关联了Orders表中的CustomerID列和Customers表中的CustomerID列。

要在删除Orders表中某一行时,同时删除Customers表中与之相关联的行,需要在定义外键时,设置相应的onDelete选项为CASCADE。例如:

CREATE TABLE Orders (
  OrderID int NOT NULL,
  CustomerID int,
  ...
  PRIMARY KEY (OrderID),
  CONSTRAINT FK_CustomerOrders 
    FOREIGN KEY (CustomerID)
    REFERENCES Customers(CustomerID)
    ON DELETE CASCADE
);

在上述语法中,ON DELETE CASCADE表示在删除Orders表中某一行时,将同时删除Customers表中与之相关联的行。

PostgreSQL中的外键

在PostgreSQL中,可以使用以下语法定义外键:

CREATE TABLE Orders (
  OrderID int PRIMARY KEY,
  CustomerID int REFERENCES Customers(CustomerID)
);

在上述语法中,REFERENCES Customers(CustomerID)表示定义了一个外键,它关联了Orders表中的CustomerID列和Customers表中的CustomerID列。

要在删除Orders表中某一行时,同时删除Customers表中与之相关联的行,需要在定义外键时,设置相应的onDelete选项为CASCADE。例如:

CREATE TABLE Orders (
  OrderID int PRIMARY KEY,
  CustomerID int REFERENCES Customers(CustomerID) ON DELETE CASCADE
);

在上述语法中,ON DELETE CASCADE表示在删除Orders表中某一行时,将同时删除Customers表中与之相关联的行。

结论

在MySQL和PostgreSQL中,通过设置外键的onDelete选项为CASCADE,可以在删除主表中的某一行时,同时删除与之相关联的从表中的行。这对于实现数据一致性和数据完整性有着重要的作用。