Php 使用自动递增ID作为主键
我正在写一个基本的博客。用户可以添加帖子,填写标题、正文、日期。提交时,主id字段将明显自动递增 我使用Laravel 5种子来填充数据库中的虚拟数据。问题是,当我需要重新设定数据种子时,我会删除前面的行,Php 使用自动递增ID作为主键,php,mysql,laravel-5,Php,Mysql,Laravel 5,我正在写一个基本的博客。用户可以添加帖子,填写标题、正文、日期。提交时,主id字段将明显自动递增 我使用Laravel 5种子来填充数据库中的虚拟数据。问题是,当我需要重新设定数据种子时,我会删除前面的行,DB::table('articles')->delete()然后重新设定种子 问题是,自动递增的id从上一个id继续。所以,如果我在初始迁移时播种10行,我得到1到10行。没问题。如果我重新设定种子,我会得到id11-21 这是有问题的,因为我是通过ID访问文章的,http://localh
DB::table('articles')->delete()代码>然后重新设定种子
问题是,自动递增的id
从上一个id
继续。所以,如果我在初始迁移时播种10行,我得到1到10行。没问题。如果我重新设定种子,我会得到id
11-21
这是有问题的,因为我是通过ID访问文章的,http://localhost/article/1
(Route::get('article/{id}'…
)但是显然不再有1的id。第一个article id现在是11
为了解决这个问题,我创建了第二个id
列,名为article\u id
:$table->primary('article\u id')->unsigned();
,作为主键,这样Laravel就会查询它
- 这会导致现在的问题,因为在插入文章时,我需要某种方法来自动增加ID
- 拥有第二个
id
列似乎是不必要的,也是创建模式的糟糕方法
我确信这是一个常见的问题-我想知道如何解决这个问题。在PHP中,当您想重置自动增量id时,而不仅仅是在PHP中执行select或insert或任何其他sql命令时执行此命令
ALTER TABLE tablename AUTO_INCREMENT = 1
关于尽管这些值是自动创建的,但MySQL确实允许您显式地为它们设置值。换句话说,如果您要迁移表,您不必担心键会以正确的顺序自动创建,并且有适当的间隔,您只需在insert中写入值即可
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论坛中可以看到这个答案
将删除文章的全部内容
并重置其增量ID
出于明显的原因,请确保不能在生产中调用此功能。:-一种方法是重置自动增量id:我不明白为什么会出现此问题。但是TRUNCATE会重置AI。@struncatehttp://localhost/article/1
,如果数据库中没有id
为1的文章,那么我会得到一个ModelNotFound
异常。@Growler,你应该这样做。为什么这很重要?用户不会通过随机选取项目ID来导航您的站点。如果只是为了测试,DB::table('articles')->truncate()
将清空它并重置ID。只需确保它不能在生产中调用即可。
DB::table('articles')->truncate();