Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySql中更新电子邮件记录的域_Mysql_Sql - Fatal编程技术网

如何在MySql中更新电子邮件记录的域

如何在MySql中更新电子邮件记录的域,mysql,sql,Mysql,Sql,因此,我正在运行以下查询,以更改我的开发人员数据库中所有电子邮件的域,但对于重复记录,我不断收到此错误,我相信存在@sign之前的文本相同的记录。您能告诉我如何修改我的现有查询,使我看不到这个错误吗 UPDATE users SET email=REPLACE(email, SUBSTR(email,INSTR(email,'@')+1),'test.com'); Error: #1062 - Duplicate entry 'username@test.com' for key '

因此,我正在运行以下查询,以更改我的开发人员数据库中所有电子邮件的域,但对于重复记录,我不断收到此错误,我相信存在@sign之前的文本相同的记录。您能告诉我如何修改我的现有查询,使我看不到这个错误吗

UPDATE users SET email=REPLACE(email, SUBSTR(email,INSTR(email,'@')+1),'test.com');

Error:
    
#1062 - Duplicate entry 'username@test.com' for key 'email'

谢谢

将域名添加到用户名中并添加您的域名。因此,任何电子邮件都是独一无二的。 您可以像这样使用子字符串\u INDEX轻松拆分它

SELECT 
    CONCAT(
        SUBSTRING_INDEX("myuser@somedomain.com", "@", 1),'_',
        REPLACE(SUBSTRING_INDEX("myuser@somedomain.com", "@", -1),'.','_'),
        '@testdomain.net') as newemail;

+--------------------------------------+
| newemail                             |
+--------------------------------------+
| myuser_somedomain_com@testdomain.net |
+--------------------------------------+
1 row in set (0.05 sec)

        
UPDATE users
    SET email = 
        CONCAT(
        SUBSTRING_INDEX(email, "@", 1),'_',
        REPLACE(SUBSTRING_INDEX(email, "@", -1),'.','_'),
        '@testdomain.net');
        

也许你应该修改你的数据库设计。您可能已将电子邮件字段定义为唯一的,甚至定义为主键。不允许在多行中包含相同的电子邮件。因此,在执行查询时,您可能正在复制同一封电子邮件。@RobertoC.Rodriguez-Hidalgo我没有创建此数据库,但查看它,电子邮件不是主键,而是索引。请检查此链接>>>。你会在那里找到原因的。你希望如何处理这些复制品?你需要解释你想要的逻辑。重复是一个问题,但我可以告诉你,我真的不在乎如何处理重复,只要我可以改变所有的电子邮件。所以谢谢你,这很有效。