SQLSTATE[23000]:无法在对象中插入重复的键行

Posted

技术标签:

【中文标题】SQLSTATE[23000]:无法在对象中插入重复的键行【英文标题】:SQLSTATE[23000]: Cannot insert duplicate key row in object 【发布时间】:2020-11-27 14:40:02 【问题描述】:

当我尝试将新列插入 SQL Server 数据库时,我收到以下错误。

SQLSTATE[23000]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法在具有唯一索引“users_api_token_unique”的对象“dbo.users”中插入重复的键行。重复键值为 ()。 (SQL:插入 [users]([name]、[email]、[password]、[updated_at]、[created_at])值(ibramin salah、ibra@gmail.com、$2y$10$laopDTNj9Ddzr4cf4a4ctuxYwra5raqm8TXXBS.Rc2wBH2mnf.cJG、 2020-08-07 08:57:49.077, 2020-08-07 08:57:49.077))

表架构

Schema::create('users', function (Blueprint $table) 
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->boolean('adminCreation')->default(0);
    $table->rememberToken();
    $table->timestamps();
);

我正在使用 Laravel 5.8 和 php 版本 7.4.4。

【问题讨论】:

【参考方案1】:

您正在尝试将新记录/行插入到电子邮件中具有唯一约束(进而创建唯一索引)的表中。

由于这似乎是唯一约束中包含的唯一列,这意味着某个电子邮件值只能在表中插入一次。否则,它将不是此列的唯一值。

按照您的表列名称,这看起来像是某种用户注册,这似乎是所需的行为。这意味着您的数据库中可能只有一些需要清除的测试数据。或者在开发过程中暂时放弃唯一性约束,或者继续编造新的电子邮件值。

【讨论】:

以上是关于SQLSTATE[23000]:无法在对象中插入重复的键行的主要内容,如果未能解决你的问题,请参考以下文章

PDO 异常 SQLSTATE [23000]:在 php 中

SQLSTATE [23000]:完整性约束违规:1452 无法在 laravel 迁移中添加或更新子行

Innobyte 插件问题:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7

SQLSTATE [23000]:违反完整性约束:4025 CONSTRAINT

SQLSTATE[23000]:完整性约束违规 1452 无法添加或更新子行:外键约束失败