使用自动递增ID作为主键

时间:2015-05-05 15:27:00

标签: php mysql laravel-5

我正在制作一个基本的博客。用户可以添加帖子,填写标题,正文,日期。提交时,主要id字段显然会自动递增。

我正在使用Laravel 5种子来使用虚拟数据填充数据库。问题是,当我需要重新设置数据时,我会删除之前的行,DB::table('articles')->delete();然后重新设置。

问题是,自动增量id从上一个id继续。所以如果我在初始迁移时播种10行,我会得到1到10行。没问题。如果我重新开始,我会得到id 11-21。

这是有问题的,因为我正在通过ID http://localhost/article/1Route::get('article/{id}'...)访问文章,但显然不再有ID为1.第一篇文章ID现在为11.

为了解决这个问题,我创建了第二个idarticle_id$table->primary('article_id')->unsigned();作为主键,因此Laravel会查询它。

  • 这会导致问题,因为在文章插入时,我需要一些方法来自动增加ID。
  • 拥有第二个id列似乎是不必要且制作架构的不好方法

我确信这是一个常见问题 - 我想知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

当您要重置自动增量ID时,在PHP中

,而不是在PHP中执行select或insert或任何其他sql命令时执行此命令

   ALTER TABLE tablename AUTO_INCREMENT = 1

此致

答案 1 :(得分:1)

DB::table('articles')->truncate();

将删除articles的全部内容并重置其增量ID。

出于显而易见的原因,确保非常确定无法在生产中调用它。 : - )

答案 2 :(得分:0)

虽然这些值是自动创建的,但MySQL确实允许您为它们显式设置值。换句话说,如果您正在迁移表,则无需担心按正确的顺序自动创建具有适当间隙的键,您只需在插入中写入值

CREATE TABLE t_autoinc1
(
   c1 INT AUTO_INCREMENT PRIMARY KEY
 );

 -- 0 or NULL means that next ID will be generated by MySQL automatically

 -- inserts 1
 INSERT INTO t_autoinc1 VALUES (0)
 -- inserts 2
 INSERT INTO t_autoinc1 VALUES (NULL)

 -- inserts 100, not 3
 INSERT INTO t_autoinc1 VALUES (100)

 -- inserts 101
 INSERT INTO t_autoinc1 VALUES (NULL)

在MySQL论坛http://forums.mysql.com/read.php?60,499281,503603#msg-503603

中查看此答案