【问题标题】:Unique Value in MySQL DatabaseMySQL 数据库中的独特价值
【发布时间】:2010-11-21 22:06:58
【问题描述】:

我正在尝试创建一个 MySQL 数据库来保存我的所有用户和登录信息。

表格列是: 用户身份 密码 积分

每个用户的 user_id 必须是唯一的,并且与他们的密码相同。 Points 只是一个整数值,我会不时对其进行编辑。现在,当我让用户访问我的网站时,我必须检查他是新用户还是旧用户。我通过查看他们的 user_id 是否已经在数据库中进行检查,如果没有,我会在表中创建一个新条目,输入他们的 user_id、密码和 0 作为积分。那么,当我创建表时,我是否仍然需要为 user_id 和 passkey 指定唯一性,即使我会在创建新条目之前先进行检查?

我如何检查 user_id 是否已经在系统中?我在想类似的事情: 从客户中选择 * WHERE user_id='test'

然后计算行数,如果为零,我创建一个新条目,对吗?我试图确保在运行代码之前一切都正确。谢谢。

【问题讨论】:

  • 您可以直接进行SELECT COUNT(*) ... 查询,而不是返回所有行并计数您的结果。

标签: php mysql


【解决方案1】:

将字段标记为UNIQUE 是个好主意,因为如果您在代码中遗漏了某些内容,数据库仍然会在事情崩溃之前捕获错误。我不知道为什么你希望密码是唯一的,两个用户拥有相同的密码有什么问题吗?

您的查询很好,但我想您在检查时并不需要实际的用户详细信息,因此您只需询问计数即可:

SELECT COUNT(*) FROM customers WHERE user_id='test'

如果返回值>0,则user_id已经存在。

【讨论】:

  • 太好了,现在你能告诉我,当我创建一个新条目时,我还添加了第四个参数,一个日期,如何将第四个参数的默认值设置为昨天(条目创建前一天)?
  • @ShadowX360:在 PHP 中使用strtotime('yesterday') 执行此操作并将时间戳值传递给数据库是最简单的。
【解决方案2】:

您应该指定唯一和自动增量,以便您只需填写 NULL 并为您完成。

但是,我担心你应该有用户名和密码...

【讨论】:

    【解决方案3】:

    首先将密码字段默认设置为 0。然后将 user_id 设为 auto_increment。每次添加新行(例如新用户)时,这将增加一个。插入数据库时​​无需检查user_id是否在系统中。

    插入时只需要指定密码,大概这是用户的密码。所有字段编辑都可以在 phpMyAdmin 中完成,位于您的表结构下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多