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

本文将介绍如何使用 MySQL 5.7 中的事务将数据从 C 表插入到 ask_questionsask_answers 表,并确保问答数据的完整性和一致性。

假设你有一个名为 C 的表,其中包含 '问题标题' 和 '问题答案' 两个字段。你的目标是将 C 表的数据插入到 ask_questionsask_answers 表中,并且需要保证 ask_answers 表中的 question_id 字段与 ask_questions 表的主键 id 一一对应。

SQL 语句

START TRANSACTION;

INSERT INTO ask_questions (user_id, category_id, title, description, price, hide, answers, status, created_at, updated_at)
VALUES
    (1, 7, '$问题标题1', '$问题标题1', 1, 1, 1, 1, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24 + 24) HOUR), @timestamp1),
    (1, 7, '$问题标题2', '$问题标题2', 1, 1, 1, 1, @timestamp2 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24 + 24) HOUR), @timestamp2);

SET @question_id = LAST_INSERT_ID();

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT C.'问题标题', Q.id, 1007, C.'问题答案', 1, NULL, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24) HOUR), @timestamp1
FROM C
JOIN ask_questions Q ON Q.title = C.'问题标题';

COMMIT;

解释

  1. START TRANSACTION:开始一个事务,确保插入操作的原子性。
  2. INSERT INTO ask_questions:将初始数据插入到 ask_questions 表中,并使用 LAST_INSERT_ID() 函数获取最后插入的记录的 ID,存储到 @question_id 变量中。
  3. INSERT INTO ask_answers:使用 SELECT 语句从 C 表和 ask_questions 表中获取需要插入的数据。通过 JOIN 语句连接 C 表和 ask_questions 表,确保 question_titlequestion_id 对应。Q.id 表示 ask_questions 表中的主键 ID,与 C 表中的 问题标题 一一对应。
  4. COMMIT:提交事务,完成插入操作。

注意事项

  • 以上代码假设 C 表中的 问题标题 字段与 ask_questions 表中的 title 字段是相同的。
  • @timestamp1 变量用于生成随机时间戳,可以根据实际需求修改。
  • 确保 C 表的数据与 ask_questionsask_answers 表的字段类型和格式一致。
  • 在实际应用中,建议使用参数化查询来防止 SQL 注入攻击。

总结

通过以上步骤,你可以使用 MySQL 5.7 事务将数据从 C 表插入到 ask_questionsask_answers 表中,并确保问答数据的完整性和一致性。 使用事务可以保证数据插入的原子性,即使在出现错误的情况下也能确保数据的完整性。

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

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

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