在MySQL数据库中,对多个表进行增删改查操作是常见的需求,本文将介绍如何在两个表(toasts和enhanced_toasts)之间进行基本的CRUD(Create, Read, Update, Delete)操作。
创建表 (Create)
我们需要创建两个表,一个是基础的toasts表,另一个是增强版的enhanced_toasts表。

CREATE TABLE toasts (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT
);
CREATE TABLE enhanced_toasts (
id INT AUTO_INCREMENT PRIMARY KEY,
toast_id INT,
enhancement VARCHAR(255) NOT NULL,
price DECIMAL(10, 2),
FOREIGN KEY (toast_id) REFERENCES toasts(id)
);
读取数据 (Read)
要查询toasts表中的所有数据及其对应的增强信息,可以使用JOIN语句。
SELECT toasts.*, enhanced_toasts.enhancement, enhanced_toasts.price FROM toasts LEFT JOIN enhanced_toasts ON toasts.id = enhanced_toasts.toast_id;
更新数据 (Update)
更新toasts表中的数据,同时更新enhanced_toasts表中与之关联的数据。
UPDATE toasts SET name = 'New Toast Name', description = 'New Description' WHERE id = 1; UPDATE enhanced_toasts SET enhancement = 'New Enhancement', price = 5.99 WHERE toast_id = 1;
删除数据 (Delete)
删除toasts表中的一条数据,同时删除enhanced_toasts表中与之关联的数据。
DELETE FROM toasts WHERE id = 1; DELETE FROM enhanced_toasts WHERE toast_id = 1;
相关问题与解答
Q1: 如果我想在删除toasts表中的数据时自动删除enhanced_toasts中的相关数据,我该如何做?
A1: 你可以在创建enhanced_toasts表时设置外键约束的级联删除(ON DELETE CASCADE),这样,当主表中的记录被删除时,所有相关的从表记录也会自动被删除,修改后的建表语句如下:
CREATE TABLE enhanced_toasts (
id INT AUTO_INCREMENT PRIMARY KEY,
toast_id INT,
enhancement VARCHAR(255) NOT NULL,
price DECIMAL(10, 2),
FOREIGN KEY (toast_id) REFERENCES toasts(id) ON DELETE CASCADE
);
Q2: 如何确保在插入新的toasts记录时,enhanced_toasts表也能获得相应的外键值?
A2: 当你插入新的记录到toasts表时,你需要手动插入一个与之关联的记录到enhanced_toasts表,你可以通过LAST_INSERT_ID()函数获取最近插入的ID,然后将其作为外键值插入到enhanced_toasts表中。
INSERT INTO toasts (name, description) VALUES ('New Toast', 'Description');
INSERT INTO enhanced_toasts (toast_id, enhancement, price) VALUES (LAST_INSERT_ID(), 'Cheese', 1.99);
这样,你就可以确保两个表之间的数据一致性和完整性。