交换SQL主键而不影响自动增量?

时间:2013-07-20 10:29:08

标签: php mysql sql codeigniter

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

表名: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。

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

3 个答案:

答案 0 :(得分:2)

你交换主键的效果是什么? 不等待它并不重要。

因为SQL是一种声明性编程语言而不是程序性语言。 交换主键'这是错的,在这里纠正你将确保一个无辜的路人没有采用你的自由放任的良好的设计原则。

答案 1 :(得分:1)

首先使用以下查询获取当前自动增量值:

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

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

ALTER TABLE MY_TABLE AUTO_INCREMENT = $previous_value

答案 2 :(得分:0)

执行alter table语句并设置auto_increment值

$sql = "ALTER TABLE MY_TABLE AUTO_INCREMENT = 3";