0

auto_increment主キーを持つテーブルを含むMySQLデータベースがあります。

この例では、次の定義で十分であると考えてください。

create table test(id integer not null auto_increment primary key) engine=innodb;

ここで、通常、次の構文を使用してこのテーブルに挿入します。

insert into test() values();

これにより、auto_increment値が適切に更新され、問題ありません。

ただし、このテーブルに高い値(たとえば、1000000)を挿入したいのですが、auto_incrementIDを更新しません。

auto_increment IDの値に影響を与えないような方法で、このテーブルに高い値を挿入することは可能ですか?

私はこれがひどい習慣であることを知っています、しかしそれは私がしなければならないいくつかのことをかなり単純化するでしょう。

前もって感謝します。

4

7 に答える 7

5

MySQL 5.0 では、自動インクリメント フィールドに任意の値を挿入できますが、これにより、自動インクリメントに使用される次の値が変更されます。また、自動インクリメント フィールドが使用する「次の数値」を ( でALTER TABLE t AUTO_INCREMENT = number) 変更できますが、これはその列の現在の最大値よりも大きくする必要があります。

いいえ、あなたが求めたことを達成できるようには見えません。

于 2009-10-05T21:58:25.057 に答える
2

行に好きなIDを与えるだけです。たとえば、次のテーブル定義があるとします。

CREATE TABLE IF NOT EXISTS `stack-test` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255),
  PRIMARY KEY  (`id`)
);

次のクエリは、自動生成された ID を持つ行を挿入します。

INSERT INTO `stack-test` (name) VALUES ('Peter');

このクエリは、ユーザー定義の ID を持つ行を挿入します。

INSERT INTO `stack-test` (id, name) VALUES (5, 'Joe');

すべての行を照会して確認します。

SELECT * FROM `stack-test`;

出力:

+----+-------+
| id | name  |
+----+-------+
|  1 | peter |
|  5 | Joe   |
+----+-------+

AUTO_INCREMENT更新:値に影響を与えたくないことを読んでください。staticsan が述べたように、AUTO_INCREMENTフィールドは自動的に最高値プラス 1 を使用します。カウンターを特定の値にリセットするステートメントがありますが、これはテーブルにそれ以上の値が存在しない場合にのみ機能します。

ALTER TABLE `stack-test` AUTO_INCREMENT = 2;
于 2009-10-05T21:58:53.307 に答える
1

同様の問題がありましたが、上記の回答は気に入っていますが、2 つのテーブルを使用して解決しました。1 つは高い ID 用で、もう 1 つは低い ID 用です。それは私の特定の状況に非常によく合いました。

于 2012-11-12T15:17:58.657 に答える
0

最終値の代わりにいくつかの初期値を予約するのはどうですか?つまり、IDを保持し、予約済みとして1000未満と言います。シードを1001として自動インクリメントして、新しい挿入がその後に値を持つようにし、IDENTITYINSERTを使用して予約範囲の値を追加します。

それが役に立てば幸い。

于 2012-08-27T11:21:18.847 に答える
0

これは不可能です。あなたが提案している方法で物事を動作させるには、挿入した非常に高い数値にカウンターが最終的に到達したときに、重複した auto_increment 値が導入されます。

于 2009-10-05T21:58:43.743 に答える
0

私はそうは思いません-自動インクリメントされたフィールドは主キーでなければならず、そのため、null ではありません。

于 2009-10-05T21:49:08.490 に答える
0

私は RDBMS のスペシャリストではありませんが、あなたの要件は非常に「非正統的」であり、別のアプローチが必要ではないでしょうか? あなた自身、これが「ひどい慣習」であることを知っていると言っています。自動インクリメント フィールドは、特定のレコードに一意の ID を割り当てるという 1 つの目的だけを果たすということではないでしょうか。実際の値に何らかの意味を与えることは、まったく間違っているのではないでしょうか?

暫定的に、別のフィールドを使用して目的を達成することをお勧めしますか?

于 2014-07-24T18:36:59.830 に答える