【问题标题】:insert in delete values in mysql column在 mysql 列中插入和删除值
【发布时间】:2016-03-29 19:57:39
【问题描述】:

MySQL 新手,我有一个用户表,在用户注册时保存数据。注册时需要 1 封电子邮件,但我希望他们能够将其他电子邮件添加到 User 表的 mail col。这可能吗?我试过了:

INSERT INTO users (email) VALUES ('email@fake.com') WHERE user_id = 1;

发现 INSERT 不会尊重“WHERE”。首先,这甚至是正确的方法吗?如果没有,如果用户选择,如何添加多个值并在以后删除多个值中的一个?

【问题讨论】:

  • 最好的方法是使用与用户表相同的用户 ID 创建第二个表,其中包含所有备用电子邮件
  • INSERT 插入新数据,UPDATE 更新现有数据。请阅读一些 mysql/sql 基础知识。
  • 我在想,但试图避免它
  • 更新会改变原来的值。我更想在电子邮件列中添加另一个值
  • 我决定创建另一个单独的表,通过主键访问用户表。谢谢大家

标签: php mysql sql insert crud


【解决方案1】:

首先,您的简单解决方案是使用CONCAT

UPDATE `users` 
SET `email` = CONCAT(`email`, ',', 'new_email@mail.com') 
WHERE id = 1

但是!当您的用户想要delete 电子邮件时,问题就来了。 您必须分解当前的 email 字符串,从中删除值,然后进行如下更新:

UPDATE `users` 
SET `email` = 'string of emails' 
WHERE id = 1

这就是为什么存储emails 应该在单独的字段中,例如email1email2,如果您有 2 封电子邮件只有

如果您允许用户拥有大量电子邮件 - 那么您应该添加一个名为 user_emails 的新表,例如,使用如下方案:

user_id | email

然后选择电子邮件变成这样:

SELECT `email` FROM `user_emails` WHERE `user_id` = 1

添加电子邮件只是另一个插入:

INSERT INTO `user_emails` VALUES (1, 'new_email')

删除是:

DELETE FROM `user_emails` WHERE id = 1 AND email = 'new_email'

【讨论】:

    【解决方案2】:

    Mysql 是一种关系数据库语言,因此在这种情况下会促进相关表。正如@Fabio 评论的那样,您最简单的方法是使用另一个电子邮件地址表,并将users 上的email 列替换为userEmailId 列,该列允许您将此email 表中的多行关联回这个user 通过让email 中的每一行包含这个userEmailId 和实际的电子邮件数据。

    添加表格是最简单的方法,我能想到的唯一其他方法是向user 添加更多列以获取更多电子邮件。然后,您可以通过更新空电子邮件列在要添加电子邮件的user 上使用update

    第三种方法可能会起作用,具体取决于您使用这些查询的方式以及它是否属于较大的 php、node 或类似应用程序的一部分,它是将新电子邮件附加到当前电子邮件并将两者分开电子邮件中不允许使用某种字符,空格字符就是一个简单的例子。在您的服务器语言中,您可以将此字符串分隔到您的个人电子邮件中。使用update 可以实现此目的,但您必须在添加新电子邮件时进行子查询以继承email 字段中的当前数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多