首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我该如何编写这个SQL脚本?

我该如何编写这个SQL脚本?
EN

Stack Overflow用户
提问于 2012-07-30 23:36:58
回答 1查看 79关注 0票数 1

我有一个dev数据库,我定期从prod数据库的数据转储中重建该数据库。在完成初始重建后,我运行了一个清理脚本,该脚本做了一些事情,特别是将所有电子邮件更改为开发地址,这样我们的客户在开发时就不会无意中收到垃圾邮件。这很好用,直到我改变了我们数据库的结构,每个客户可以有多个电子邮件,有一个唯一的约束,不允许每个客户多次使用相同的电子邮件。现在我正在尝试重写我的清理脚本,将所有电子邮件更改为"xyzpdq@abc.com“,但由于唯一的约束,它失败了。

由于显而易见的原因,我不想删除对我的dev db的唯一约束。我需要想出一种方法来分配假的,但独特的电子邮件给有多个联系人的客户。

下面是我的数据结构:

代码语言:javascript
复制
CREATE TABLE contact (
    contactid decimal(22,0) DEFAULT '0' NOT NULL,
    ...,
    PRIMARY KEY (contactid)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE contact_email (
    contactemailid decimal(22,0) DEFAULT '0' NOT NULL,
    contactid decimal(22,0) DEFAULT '0' NOT NULL,
    emailaddress varchar(255) COLLATE latin1_bin NOT NULL,
    PRIMARY KEY (contactemailid),
    CONSTRAINT ce_contactid_fk FOREIGN KEY (contactid) REFERENCES contact (contactid) ON DELETE NO ACTION ON UPDATE NO ACTION,
    INDEX ce_contactid_fk (contactid),
    CONSTRAINT ce_uniquecombokey UNIQUE KEY (contactid, emailaddress)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE merchant_contact (
    merchantcontactid decimal(22,0) DEFAULT '0' NOT NULL,
    merchantacctid decimal(22,0) DEFAULT '0' NOT NULL,
    contactid decimal(22,0) DEFAULT '0' NOT NULL,
    billingcontact tinyint(1) default '0' NOT NULL,
    PRIMARY KEY (merchantcontactid),
    CONSTRAINT mc_contactid_fk FOREIGN KEY (contactid) REFERENCES contact (contactid) ON DELETE NO ACTION ON UPDATE NO ACTION,
    INDEX mc_contactid_fk (contactid),
    CONSTRAINT mc_uniquecombokey UNIQUE KEY (merchantacctid, billingcontact)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

在我允许每个客户发送多封电子邮件之前,我的清理脚本的这一部分很简单:

代码语言:javascript
复制
update contact_email set emailaddress = 'xyzpdq@abc.com';

现在由于约束,它失败了。我得到了一个Error Code: 1062, SQL State: 23000 (完整性约束冲突)。

有什么建议吗?提前谢谢。我将继续自己研究它,但希望有经验的SQL脚本编写人员能给我一些建议/想法。

ETA:谢谢你到目前为止的点子。我遗漏了一件事,那就是我当前设置的假地址确实会出现在我身上,所以我可以在测试时看到电子邮件。我正在询问我们的运维团队,是否可以将类似'dev-{contactemailid}@abc.com‘这样的东西配置为所有人都来找我,但我不太乐观。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-30 23:41:21

代码语言:javascript
复制
update contact_email set emailaddress = CONCAT(contactemailid, 'xyzpdq@abc.com')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11724733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档