0

我有一个存储基本文章信息的表:

表名:cms_articles

[article_id] , [article_header] , [article_content]
     1 , test , test content
     2 , another , something
     3 , article , text

我正在使用以下 SQL 来交换两篇文章的文章 ID:-

"UPDATE cms_articles SET article_id=99999 WHERE article_id=".$article_id1
"UPDATE cms_articles SET article_id=".$article_id1." WHERE article_id=".$article_id2
"UPDATE cms_articles SET article_id=".$article_id2." WHERE article_id=99999"

所以我只是在交换发生时使用临时 ID 99999 交换他们的 ID。

这可行,但是当我向表中添加新文章时,它会自动将 ID 设置为 100000,这要归功于autoincrement,尽管最高 article_id 实际上是 3!

4

3 回答 3

2

你交换主键有什么效果?不等也没关系。

因为 SQL 是一种声明式编程语言,而不是一种程序语言。交换“主键”是错误的,在这里纠正您将确保无辜的路人不会采用您对良好设计原则的自由放任。

于 2013-07-20T10:39:49.023 回答
1

首先使用这些查询获取当前的自动增量值:

SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'table_name'
AND table_schema = DATABASE( ) ;

然后让你的身份证交换。然后将自动增量值设置回其先前的值,如 @DevZer0 写道:

ALTER TABLE MY_TABLE AUTO_INCREMENT = $previous_value
于 2013-07-20T10:37:40.070 回答
0

执行alter table语句并设置auto_increment值

$sql = "ALTER TABLE MY_TABLE AUTO_INCREMENT = 3";
于 2013-07-20T10:32:36.980 回答