MySQL 事务插入数据:将数据从C表插入到ask_questions和ask_answers表
使用事务将数据从C表插入到ask_questions和ask_answers表
本指南介绍如何使用事务将数据从C表插入到MySQL数据库的ask_questions和ask_answers表中,并确保ask_answers表中的question_id与ask_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_id与id一一对应。COMMIT:提交事务。
注意:
user_id和created_at,updated_at等字段需要根据实际情况进行修改。- 在执行此语句之前,请确保C表中的数据已经与
ask_questions表中的数据对应好了,否则可能会导致数据插入错误。 - 使用事务可以确保所有操作都成功完成,如果其中任何一个操作失败,则整个事务将回滚,保证数据的一致性。
原文地址: https://www.cveoy.top/t/topic/lO3j 著作权归作者所有。请勿转载和采集!