mysql 外键约束 同时删除
时间: 2023-10-13 21:04:14 浏览: 172
MySQL 中可以通过添加外键约束来保证表之间的关系完整性。如果你希望在删除主表数据的同时也删除从表相关数据,可以使用 ON DELETE CASCADE 选项来实现。
例如,有两张表 A 和 B,B 表中有一个外键关联到 A 表的主键上:
```
CREATE TABLE A (
id INT PRIMARY KEY
);
CREATE TABLE B (
id INT PRIMARY KEY,
a_id INT,
FOREIGN KEY (a_id) REFERENCES A(id) ON DELETE CASCADE
);
```
在上面的示例中,当你从 A 表中删除一行数据时,与之相关的在 B 表中的行数据也会被自动删除。
需要注意的是,使用 ON DELETE CASCADE 选项要谨慎,因为它可能会导致数据不可逆地丢失。所以在使用之前一定要仔细考虑。
相关问题
mysql 外键约束 同时删除和更新
在 MySQL 中,可以通过添加外键约束来实现级联更新和删除。具体来说,可以使用以下两种方式之一来实现:
1. ON DELETE 和 ON UPDATE 子句
在创建外键时,可以使用 ON DELETE 和 ON UPDATE 子句来指定在父表中的行被删除或更新时应该执行的操作。以下是一些可用的选项:
- CASCADE:当父表中的行被删除或更新时,子表中的相关行也应该被删除或更新。
- SET NULL:当父表中的行被删除或更新时,子表中的相关行的外键列应该设置为 NULL。
- RESTRICT:当父表中的行被删除或更新时,应该阻止对子表的操作。
- NO ACTION:与 RESTRICT 相同。
以下是一个示例:
```
CREATE TABLE parent (
id INT PRIMARY KEY
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
```
在上面的示例中,如果 parent 表中的行被删除或更新,那么 child 表中的相关行也会被删除或更新。
2. SET NULL 和 SET DEFAULT 子句
在创建外键时,还可以使用 SET NULL 和 SET DEFAULT 子句来指定应该设置子表中的外键列的值。以下是一个示例:
```
CREATE TABLE parent (
id INT PRIMARY KEY
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE SET NULL
ON UPDATE SET DEFAULT
);
```
在上面的示例中,如果 parent 表中的行被删除,那么 child 表中的相关行的 parent_id 列将被设置为 NULL。如果 parent 表中的行被更新,那么 child 表中的相关行的 parent_id 列将被设置为 parent 表中更新后的值的默认值。
mysql 外键约束多列_MySQL外键约束(FOREIGN KEY)
MySQL 外键约束可以用来保证表与表之间的关系完整性。当我们在一个表中定义了一个外键,它会引用另一个表中的列,这个被引用的列必须是另一个表的主键或者是一个唯一键。在 MySQL 中,外键约束可以跨越多个列。
下面是一个例子,演示如何在 MySQL 中定义一个外键约束,跨越两个列:
```
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id, order_date)
REFERENCES customers(id, date)
);
```
在这个例子中,orders 表中的 customer_id 和 order_date 列都被用来定义外键约束,它们分别引用了 customers 表中的 id 和 date 列。这个外键约束确保了 orders 表中的每一行都有对应的 customers 表中的行,而且这个关联是基于 customer_id 和 order_date 两列的值。
在定义外键约束时,我们还可以指定 ON DELETE 和 ON UPDATE 规则,用来控制当关联表中的某一行被删除或更新时,对应的行应该怎么处理。常用的规则包括:
- CASCADE:当关联表中的某一行被删除或更新时,对应的行也会被删除或更新。
- RESTRICT:当关联表中的某一行被删除或更新时,如果该行有对应的行,则不允许删除或更新。
- SET NULL:当关联表中的某一行被删除或更新时,对应的行的外键列会被设置为 NULL。
我们可以在定义外键约束时使用这些规则,例如:
```
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id, order_date)
REFERENCES customers(id, date)
ON DELETE CASCADE
ON UPDATE RESTRICT
);
```
在这个例子中,我们指定了 ON DELETE CASCADE 和 ON UPDATE RESTRICT 规则,表示当 customers 表中的某一行被删除时,对应的 orders 表中的行也会被删除;当 customers 表中的某一行被更新时,只有当 orders 表中的行没有被引用时,才允许更新。
阅读全文