0

Row_id次のような形式 の主キー ( ) を持つ SQL テーブルがあります。

110001  
110002  
110003  
...  

このテーブルは、時間の経過とともにいくつかの行を削除することによって更新される場合があります。私はphpスクリプトを持っており、最後の既存のIDを増やすだけでなく、最初に利用可能な位置に新しい行を挿入したいと考えています。

たとえば、私がこれを持っている場合:

110001  
110002  
110004  
110005

新しい行を挿入して、id = 110003notを指定したい110006

どんな助けでも大歓迎です!

4

2 に答える 2

2

なぜIDを再利用したいのかわかりませんが、どうぞ

Tblテーブル名が次のとおりであるとします。

Select MIN(a.Id + 1)
From   Tbl A 
       Left Join Tbl B
         On A.Id = B.Id - 1
Where  B.Id Is NULL

これは、必要なIDを取得するために機能するはずです。
その後、明らかに、前の値に基づいて挿入を行う必要があります。
そう

INSERT into yourTable(id,....) VALUES(
    Select MIN(a.Id + 1)
    From   Tbl A 
           Left Join Tbl B
             On A.Id = B.Id - 1
    Where  B.Id Is NULL,
    .....)

ここに画像の説明を入力

于 2012-06-28T15:24:59.260 に答える
0

ID を UNIQUE にすることができます。次に、110001 から始まる for/while ループを実行します。

`$query = "...";
try {
    mysql_query($query);
} catch(Exception $ex) {
    if (mysql_errno() == 1062) {
        throw new Exception('The email you used exists already');
    } else {
        throw $ex;
    }
}

` 1062 エラーは、一意のキーが破損するたびに発生します。一意の電子メール フィールドのためにそれをキャッチする必要がありますが、存在を無視する主キーまたは別の一意のフィールドを壊したために発生する可能性もあります。このクエリ中に他の一意の制約が壊れる可能性があると思われる場合に備えて、このコードを調整する必要があります。

クエリが成功した場合。その特定のIDを挿入できます。

于 2012-06-28T15:28:11.063 に答える