(已编辑)
在不参考 Spring 或 Hibernate 等框架的情况下,您可以简单地设置具有外键列约束的数据库表,以便在删除“用户”记录时删除所有相关记录。该约束称为ON DELETE CASCADE,如果在连接表的外键列上定义它,RDBMS将自动删除所有外键与被删除记录的选定用户ID匹配的记录。
尝试专门针对您正在使用的数据库服务器对 ON DELETE CASCADE 约束进行一些研究,以了解更多详细信息。
(编辑#2)
这是来自MySQL documentation 的修改示例:
CREATE TABLE product (
category INT NOT NULL, id INT NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)
) ENGINE=INNODB;
CREATE TABLE customer (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE product_order (
no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
INDEX (customer_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON DELETE CASCADE,
FOREIGN KEY (customer_id)
REFERENCES customer(id)
) ENGINE=INNODB;
该示例显示了product 和product_order 之间的关系。当从product表中删除一条记录时(只需运行DELETE FROM product WHERE id=... and category=...),product_order表中所有引用的记录都会被自动删除,无需任何额外的SQL语句。
另一方面,当从customer 表中删除一行时,您将得到与现在相同的错误,因为在这种情况下,默认约束限制了对记录的删除操作。