首页 / MYSQL / mysql-用外键将表拆分成两个表
mysql-用外键将表拆分成两个表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-用外键将表拆分成两个表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1552字,纯文字阅读大概需要3分钟。
内容图文
![mysql-用外键将表拆分成两个表](/upload/InfoBanner/zyjiaocheng/887/2733cb7c6047477d9cdccefbd0ef6bf8.jpg)
我有一个表:drupal.comments,以及其他各列:
cid: primary key
uid: foreign key to users table, optional
name: varchar, optional
email: varchar, optional
描述说:UID是可选的,如果为0,则匿名注释.在这种情况下,将设置名称/电子邮件.
我想将其分为两个表rails.comments和rails.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-用外键将表拆分成两个表全部内容,希望文章能够帮你解决mysql-用外键将表拆分成两个表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。