将 C 表数据插入到 ask_questions 和 ask_answers 表中

数据库版本: MySQL 5.7

问题描述:

现在有一个 C 表,表中只有 问题标题问题答案 两个字段,需要将 C 表的数据插入到 ask_questionsask_answers 表中,并且确保 ask_answers 表的 question_id 字段与 ask_questions 表的主键 id 一一对应。

解决方案:

如果 C 表中的数据与 ask_questionsask_answers 的数据存在对应关系,可以使用以下语句将 C 表的数据插入到对应的表中:

START TRANSACTION;

INSERT INTO ask_questions (user_id, category_id, title, description, price, hide, answers, status, created_at, updated_at)
SELECT user_id, category_id, title, description, price, hide, answers, status, created_at, updated_at
FROM C;

SET @question_id = (SELECT MAX(id) FROM ask_questions);

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT C.question_title, @question_id, C.user_id, C.answer_content, C.status, C.adopted_at, C.created_at, C.updated_at
FROM C
INNER JOIN ask_questions ON C.question_title = ask_questions.title
WHERE ask_questions.id = @question_id;

COMMIT;

解释:

  1. START TRANSACTION; 开启事务,保证操作的原子性。
  2. 第一步:插入 ask_questions
    • INSERT INTO ask_questions ... SELECT ... FROM C; 将 C 表的数据插入到 ask_questions 表中。
    • SET @question_id = (SELECT MAX(id) FROM ask_questions); 获取最后插入的 ask_questions 的 id,并赋值给 @question_id 变量。
  3. 第二步:插入 ask_answers
    • INSERT INTO ask_answers ... SELECT ... FROM C INNER JOIN ask_questions ... WHERE ...; 将 C 表的数据插入到 ask_answers 表中。
    • question_id 字段赋值为 @question_id 变量的值,确保了问题和答案的对应关系。
    • INNER JOIN 将 C 表和 ask_questions 表关联起来,只取出需要的数据。
    • WHERE 子句限制了只处理与 @question_id 相关的数据。
  4. COMMIT; 提交事务。

注意:

  • C 表中必须包含与 ask_questionsask_answers 表中对应字段的数据。
  • C.question_title 字段必须与 ask_questions.title 字段对应,才能确保问题和答案的正确关联。
  • 使用 INNER JOIN 可以有效提高查询效率,只处理需要的数据。

总结:

以上代码展示了如何使用事务将 C 表数据插入到 ask_questionsask_answers 表中,并确保了数据的一致性和完整性。在实际应用中,可以根据实际情况调整代码,例如添加数据校验、错误处理等功能。

MySQL 事务插入数据:将 C 表数据插入 ask_questions 和 ask_answers 表

原文地址: https://www.cveoy.top/t/topic/lO3u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录