当前位置: 首页 > 知识库问答 >
问题:

在具有现有主键的表中添加自动递增id

段曦
2023-03-14

我正在尝试使用现有主键将自动递增id添加到现有表中

这是我的密码

表代码的初始迁移

    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->string('ISBN')->index();
            $table->string('name')->index();
            $table->string('publisher');
            $table->string('level_levelName')->index();
            $table->string('provider_providerName')->index();
            $table->string('category_categoryName')->index();
            $table->text('description');
            $table->timestamps();
            $table->primary('ISBN');
            $table->foreign('provider_providerName')->references('providerName')->on('providers')->onDelete('cascade')->onUpdate('cascade');
            $table->foreign('level_levelName')->references('levelName')->on('levels')->onDelete('cascade')->onUpdate('cascade');
            $table->foreign('category_categoryName')->references('categoryName')->on('categories')->onDelete('cascade')->onUpdate('cascade');

        });
    }

将自动增量ID添加到现有表代码

    public function up()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->bigIncrements('id');
        });
    }

我试图做的是向这个现有表添加一个自动递增的id,但它给了我这个错误

 SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary keys defined (SQL: alter table 
`books` add `id` bigint unsigned not null auto_increment primary key)

有人能帮帮我吗?我不想删除表的主键,我只想添加另一个自动递增的id,它不是主键,但可以是唯一键

共有2个答案

王德华
2023-03-14

不能使用bigIncrements,因为这样会试图将其创建为主键。您可以尝试以下方法

$table->bigInteger('id', true, true)->index();

根据biginger公共函数biginger($column,$autoIncrement=false,$unsigned=false))的定义,第二个值用于自动递增,第三个值用于有符号/无符号。从Mysql Innodb:Autoincrement非主键中,必须对自动增量键进行索引。

朱博实
2023-03-14

这不是拉威尔的错误。mysql表中不能有两个自动递增列。

但是,您可以添加到模型中,获取数据库中字段的最大值,然后插入1。

在这里可以找到其他解决方案

 类似资料:
  • 我想向包含数据的现有表中添加一个新的自动递增主列。我该怎么做? 我首先添加了一列,然后尝试添加一个序列,之后我就不知道如何插入该列并将其作为主键。

  • 问题内容: 我想向具有数据的现有表中添加一个新的自动增量主列。我怎么做? 我先添加了一个列,然后尝试添加一个序列,此后,我迷失了如何插入该列并将其作为主键。 问题答案: 假设您的表被调用t1,您的主键被称为idFirst,创建序列: 然后创建一个触发器,该触发器在插入时增加:

  • 问题内容: 我需要创建一个基本上只保留索引列表的表。因此,我创建了一个表,其中只有一个自动递增的列,称为“ id”。但是,我似乎无法向该表隐式添加自动递增的值。 我知道通常在表中有这样一列(不仅有此列)时,您可以执行以下操作: 插入表(col1,col2 …)值(val1,val2 …) 而且,如果您不指定自动递增的列,它将自动获取一个值。但是,类似: 插入表()值()插入表插入表() 等等。所有

  • 问题内容: 我正在尝试更改没有主键或auto_increment列的表。我知道如何添加主键列,但我想知道是否有可能自动将数据插入主键列(我已经在数据库中有500行,并希望为其提供ID,但我不想手动执行) 。有什么想法吗?非常感谢。 问题答案: 在我的测试中,添加列的语句可以正常工作: 在为测试目的而创建的临时表上,以上语句创建了该 列,并为该表中的每个现有行插入了自动递增值,从1开始。

  • 我想用自动增量id向firebase数据库添加一个新用户,如下截图所示: 我试过:

  • 问题内容: 我有多个结构相同的数据库,有时会在其中复制数据。为了保持数据完整性,我使用两列作为主键。一个是数据库ID,它链接到包含有关每个数据库的信息的表。另一个是表键。它不是唯一的,因为它可能有多个行,且此值相同,但database_id列中的值不同。 我打算将这两列变成一个联合主键。但是,我也想将表键设置为自动递增-但基于database_id列。 EG,使用以下数据: 如果我要添加包含dab