使用事务将数据从C表插入到ask_questions和ask_answers表

本指南介绍如何使用事务将数据从C表插入到MySQL数据库的ask_questionsask_answers表中,并确保ask_answers表中的question_idask_questions表的主键id一一对应。

假设C表包含以下两个字段:

  • question_title:问题标题
  • question_answer:问题答案

步骤 1: 创建事务

START TRANSACTION;

步骤 2: 将数据插入ask_questions表(假设已有对应数据)

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);

步骤 3: 获取插入数据的id

SET @question_id = LAST_INSERT_ID();

步骤 4: 将数据插入ask_answers表

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
VALUES ('$问题标题1', @question_id, 1007, '$问题答案1', 1, NULL, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24) HOUR), @timestamp1),
       ('$问题标题2', @question_id+1, 1007, '$问题答案2', 1, NULL, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24) HOUR), @timestamp1);

步骤 5: 提交事务

COMMIT;

将数据从C表插入ask_answers表

假设C表中的数据已经与ask_questions表中的数据对应好了,可以使用以下语句将C表中的数据插入到ask_answers表中:

START TRANSACTION;

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT 
    C.question_title, Q.id, 1007, C.question_answer, 1, NULL, NOW(), NOW()
FROM 
    C
    INNER JOIN ask_questions Q ON C.question_title = Q.title;

COMMIT;

解释:

  • START TRANSACTION:启动一个事务。
  • INSERT INTO ask_answers ... SELECT ... FROM ...: 使用SELECT语句从C表中查询数据,并将其插入到ask_answers表中。
  • INNER JOIN ask_questions Q ON C.question_title = Q.title: 使用INNER JOIN将C表和ask_questions表连接起来,以确保question_idid一一对应。
  • COMMIT:提交事务。

注意:

  • user_idcreated_at, updated_at 等字段需要根据实际情况进行修改。
  • 在执行此语句之前,请确保C表中的数据已经与ask_questions表中的数据对应好了,否则可能会导致数据插入错误。
  • 使用事务可以确保所有操作都成功完成,如果其中任何一个操作失败,则整个事务将回滚,保证数据的一致性。
MySQL 事务插入数据:将数据从C表插入到ask_questions和ask_answers表

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

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