我正在制作一个基本的博客。用户可以添加帖子,填写标题,正文,日期。提交时,主要id字段显然会自动递增。
我正在使用Laravel 5种子来使用虚拟数据填充数据库。问题是,当我需要重新设置数据时,我会删除之前的行,DB::table('articles')->delete();
然后重新设置。
问题是,自动增量id
从上一个id
继续。所以如果我在初始迁移时播种10行,我会得到1到10行。没问题。如果我重新开始,我会得到id
11-21。
这是有问题的,因为我正在通过ID http://localhost/article/1
(Route::get('article/{id}'...
)访问文章,但显然不再有ID为1.第一篇文章ID现在为11.
为了解决这个问题,我创建了第二个id
列article_id
:$table->primary('article_id')->unsigned();
作为主键,因此Laravel会查询它。
id
列似乎是不必要且制作架构的不好方法我确信这是一个常见问题 - 我想知道如何解决这个问题。
答案 0 :(得分:1)
,而不是在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
中查看此答案