gpt4 book ai didi

mysql - 使用外键将表拆分为两个表

转载 作者:行者123 更新时间:2023-11-29 07:09:39 25 4
gpt4 key购买 nike

我有一个表:drupal.comments,其中包括列:

cid: primary key
uid: foreign key to users table, optional
name: varchar, optional
email: varchar, optional

描述中说:UID是可选的,如果为0,则匿名发表评论;在这种情况下,名称/电子邮件已设置。

我想把它分成两个表 rails.commentsrails.users,其中总有一个用户:

id: primary key
users_id: foreign key, always set.

因此,对于每个 drupal.comment,我需要从 drupal.comments.name/drupal.comments.email 和 rails.comment 创建一个新用户,其中 rails.comment.users_id 是唯一的 ID创建用户。

或者,如果 rails.user 的用户名/电子邮件已经存在,我需要获取该 users_id 并将其用作新评论记录中的外键。

或者,如果设置了 drupal.comment.uid,我需要将其用作 users_id。

这在 SQL 中可能吗? 从一个源获取但填充多个表的查询是否可以在 SQL 中使用?或者是否有一些 (My)SQL 技巧可以实现这一点?或者我应该简单地用 Ruby、PHP 或其他语言编写脚本吗?

最佳答案

你可以用 TRIGGER 来做到这一点.

下面是一些伪代码来说明这种技术:

DELIMITER $$

DROP TRIGGER IF EXISTS tr_b_ins_comments $$

CREATE TRIGGER tr_b_ins_comments BEFORE INSERT ON comments FOR EACH ROW BEGIN
DECLARE v_uid INT DEFAULT NULL;

/* BEGIN pseudo-code */
IF (new.uid IS NULL)
THEN
-- check for existing user with matching name and email address
select user_id
into v_uid
from your_user_table
where name = new.name
and email = new.email;

-- if no match, create a new user and get the id
IF (v_uid IS NULL)
THEN
-- insert a new user into the user table
insert into your_user_table ...

-- get the new user's id (assuming it's auto-increment)
set v_uid := LAST_INSERT_ID();
END IF;

-- set the uid column
SET new.uid = v_uid;
END IF;

/* END pseudo-code */
END $$

DELIMITER ;

关于mysql - 使用外键将表拆分为两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com