【问题标题】:Violation of UNIQUE KEY constraint 'UQ__user__xxx'. Cannot insert duplicate key in object 'dbo.user'. The duplicate key value is (<NULL>)违反 UNIQUE KEY 约束“UQ__user__xxx”。无法在对象“dbo.user”中插入重复键。重复键值为 (<NULL>)
【发布时间】:2017-05-30 07:10:14
【问题描述】:

我正在为我的 Yii2 项目使用 SQL Server,并成功连接并运行迁移。

我想将新用户从我的 yii2 项目注册到我的数据库,但我从 SQL Server 收到此错误。=:

违反 UNIQUE KEY 约束“UQ__user__xxx”。无法在对象“dbo.user”中插入重复键。重复键值为 (NULL)。

这是执行的查询:

INSERT INTO [user]
            ([username],
             [auth_key],
             [password_hash],
             [email],
             [user_type],
             [status],
             [created_at],
             [updated_at])
VALUES      
('andhy', 
 'EIrQRO31WLuDGDPoSIkz_wTWEzjGzIK0',
 '$2y$13$1cWynvtIyDA.7I3nyvKqmuq6KT5XPsNc6LaJ04MrWmiNpqP2.vraS',
 'my.account@gmail.com',
 'backend',
 10,
 1496125394,
 1496125394)

唯一键只有[id](作为PK)、[username]、[email]、[password_reset_token]。

我认为必须在查询中选择 [id] 字段并将 IDENTITY_INSERT 设置为 ON,但这对我来说不是一个好的解决方案。

【问题讨论】:

  • 错误信息很容易解释,你的表有一个约束阻止你输入重复的键。
  • 我只是使用yii2的默认迁移来创建用户表
  • @DavidG 我知道错误的含义。我已确保 [username]、[email]、[password_reset_token] 字段没有重复条目。没有设置[id]字段时,只有[id]字段不能像MySQL一样执行自增。
  • 您要么必须明确提供 ID 字段的值,要么启用 IDENTITY_INSERT 以便在未提供值时自动递增按预期工作。我想不出任何其他选择。
  • 约束UQ__user__xxx是什么?这将告诉您哪些列是给您错误的键的一部分。另外,请edit您的问题,而不是在 cmets 中添加代码。

标签: php sql-server yii2 sqlsrv


【解决方案1】:

password_reset_token 被插入为 null。

【讨论】:

    【解决方案2】:

    确保您在用户表中为 id 设置了自动递增的勾选列。 因为它采用与之前为下一次操作存储的 id 相同的值

    【讨论】:

      【解决方案3】:

      如果您仍然遇到此原因,它适用于 MySQL 而不是 MSSQL,请在您的用户模型中添加以下行:

      [['username'], 'unique'],
      [['email'], 'unique'],
      

      换句话说,从:

      public function rules()
          {
              return [
                  ['status', 'default', 'value' => self::STATUS_ACTIVE],
                  ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_INACTIVE, self::STATUS_DELETED]],
              ];
          }
      
      

      到:

      public function rules()
          {
              return [
                  [['username'], 'unique'],
                  [['email'], 'unique'],
                  ['status', 'default', 'value' => self::STATUS_ACTIVE],
                  ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_INACTIVE, self::STATUS_DELETED]],
              ];
          }
      

      【讨论】:

        猜你喜欢
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        相关资源
        最近更新 更多