にテーブルID(自動インクリメント)を更新する方法:が中央に一列を削除して、例えばMySQLの
Row Name
1 John
2 May
3 Marry
4 Tom
5 Peter
私は行2及び列3を削除すると仮定し、それにトムとピーターを更新することが可能です行ID 2と3、次の挿入行は行ID 4になりますか?
にテーブルID(自動インクリメント)を更新する方法:が中央に一列を削除して、例えばMySQLの
Row Name
1 John
2 May
3 Marry
4 Tom
5 Peter
私は行2及び列3を削除すると仮定し、それにトムとピーターを更新することが可能です行ID 2と3、次の挿入行は行ID 4になりますか?
いいえ、これはこの問題が発生する可能性があるためです。ストア目録を管理していて、データベーステーブルのIDに基づいて各項目に内部バーコードがあるとします。 1つのアイテムを再度ストックしてデータベースから取り出した場合、削除されたアイテムより大きなIDを持つアイテムのIDはすべて1ずつ減ります。これらのアイテムのすべてのバーコードは無駄になります。
データベース内のID番号は、一般に人が使用または参照することを目的としたものではありません。それらは、コンピュータが所与のレコードを迅速かつ確実にプルアップすることを可能にする、データベース内の特定のアイテムの静的インデックスであることが意図されている。テーブルのIDフィールドを作成するときは、失われたIDが発生したときにこれらのIDを処理するのに十分な大きさのデータ型を作成するようにしてください。
はい、いますが、行を再作成する必要があります。
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;
これは単なる提案です。私はこれが最善の解決策ではないと言います。ただ考えてみてください。
削除クエリを実行します。
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++;
}
次の問合せを挿入する前に、挿入問合せの行として行および設定値の最大値を取得する必要があります。 これは単なるアイデアです。完全なコードではありません。
トリガーを使用して試すことができます。状況は – Gerep
トリガーとは何ですか? – red23jordan
トリガーは、データベースのイベントによって自動的に実行されるデータベースコードです。詳細はこちらをチェックしてください。MySQLを使用していると仮定しています:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – Gerep