2012-01-06 13 views
4

にテーブルID(自動インクリメント)を更新する方法:が中央に一列を削除して、例えばMySQLの

Row Name 
1 John 
2 May 
3 Marry 
4 Tom 
5 Peter 

私は行2及び列3を削除すると仮定し、それにトムとピーターを更新することが可能です行ID 2と3、次の挿入行は行ID 4になりますか?

+0

トリガーを使用して試すことができます。状況は – Gerep

+0

トリガーとは何ですか? – red23jordan

+0

トリガーは、データベースのイベントによって自動的に実行されるデータベースコードです。詳細はこちらをチェックしてください。MySQLを使用していると仮定しています:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – Gerep

答えて

1

いいえ、これはこの問題が発生する可能性があるためです。ストア目録を管理していて、データベーステーブルのIDに基づいて各項目に内部バーコードがあるとします。 1つのアイテムを再度ストックしてデータベースから取り出した場合、削除されたアイテムより大きなIDを持つアイテムのIDはすべて1ずつ減ります。これらのアイテムのすべてのバーコードは無駄になります。

データベース内のID番号は、一般に人が使用または参照することを目的としたものではありません。それらは、コンピュータが所与のレコードを迅速かつ確実にプルアップすることを可能にする、データベース内の特定のアイテムの静的インデックスであることが意図されている。テーブルのIDフィールドを作成するときは、失われたIDが発生したときにこれらのIDを処理するのに十分な大きさのデータ型を作成するようにしてください。

+0

完了は別の質問です。しかし、良い説明。 – Nikoloff

+0

彼が望むのは値を順序付けることだと思うので、彼はこの状況に特別に新しい列を作成するので問題はありません。 – Gerep

+0

@Nikoloffはい、公正な点ですが、私は彼が設定を探していると仮定しました。自動的に彼のためにそれを行うだろう、以下のElenによって与えられた答えはもちろんである。 –

2

はい、いますが、行を再作成する必要があります。

ALTER TABLE `users` DROP `Row`; 
ALTER TABLE `users` AUTO_INCREMENT = 1; 
ALTER TABLE `users` ADD `Row` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 
0

これは単なる提案です。私はこれが最善の解決策ではないと言います。ただ考えてみてください。

削除クエリを実行します。

DELETE FROM table_name WHERE Row IN (2,3); 

削除した後は、PHPで選択クエリリクエストを行い、データセットを配列に取得します。

SELECT Row, Name from table_name ORDER BY Row ASC; 

ループを使用してUPDATEを実行します。

$index = 1; 
foreach($dataset as $item) 
{ 
// Your update query 
$sql = "UPDATE table_name SET Row=$index where Name='" . $item['Name'] . "'"; 
$index++; 
} 

次の問合せを挿入する前に、挿入問合せの行として行および設定値の最大値を取得する必要があります。 これは単なるアイデアです。完全なコードではありません。

関連する問題