0

基本的な記事情報を格納するテーブルがあります。

テーブル名: cms_articles

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

次の SQL を使用して、2 つの記事の記事 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"

したがって、スワップが発生している間、99999 の一時 ID を使用して、ID を単純に交換しています。

autoincrementこれは機能しますが、テーブルに新しい記事を追加すると、実際には最高の article_id が 3 であるにもかかわらず、 のおかげで ID が自動的に 100000 に設定されます!

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( ) ;

次に、ID を交換します。そして、@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 に答える