2011-08-01 9 views
0

私はMySQLテーブルにものを追加しており、各アイテムは質問番号のように私のシステムに表示されるpositionを持っています。MySQLインテリジェントなデフォルト値

新しい質問を追加する前にpositionが最大であることが分かりました。+1それを追加してから追加します。しかし、2番目のクエリを必要としないよりインテリジェントな方法があるのだろうかと思いました。

のようなものINSERT INTO questions (id, position) values (0, MAX(position))

このフィールドはプライマリキーではありません。この場合、auto_incrementは使用できません。

positionをキーとして使用することはできません。なぜなら、このキーは他の多くのものと関係しており、いつでもpositionを変更することができるからです。

私はかなり自信を持っているMySQLクエリライターです。質問以外の提案はしないでください。私は選択肢がたくさんあることを知っています。これは単なる構文質問です。

私はあなたが私のドリフトを得ると確信しています!

乾杯。

+0

同様に、自動増分インデックスはおそらく? –

+0

残念ながら、テーブルには複数のアンケートの質問があるので、うまくいきません。 – Alex

+0

あなたはいつもあなたの挿入物に対してサブクエリーを行い、 'COUNT'に1を加えることができます。 –

答えて

0

auto_incrementはほとんどの民間人のように使用できますか?

これは並行処理が安全であるため、インテリジェントな方法です。

+0

私の 'position'フィールドはキーではありません。位置はいつでも変更できるので別のキーが必要です – Alex

+0

別のテーブルを使用して、別のキーを持つ現在のテーブルのPKであるFKを持っています。しかし、それを変更することができれば、誰かが967を挿入し、42から1432の更新が発生したらどうなりますか?ユニークですか? – gbn

0

MySQLのフィールドプロパティを変更するのが最善の方法です。つまり、入力を行わずにMySqlが作業を実行できるようにすることです。挿入時に

TABLE TableName CHANGE positionposition INT(11)NOT NULL AUTO_INCREMENT

は今、このフィールドの任意の値を提供しません。

INSERT INTO questions (var1, var2) values (val1,val2)

MySQLは自動的に位置の値を増加します。必要に応じて、現在のカウンタとリセットを設定することができます。この方法では、あなたは採石場をまったく運営していません。このような

+0

auto_incrementフィールドが1つしか許可されておらず、それがプライマリキーである必要があります。 – Alex

+1

auto_incrementフィールドはプライマリキーである必要はありません。 – Tumharyyaaden

+0

'MySQLは言った: #1075 - 不正なテーブル定義。 autoカラムは1つしかなく、キーとして定義する必要があります。 – Alex

0

何かが明らかに

INSERT INTO questions (id, position) SELECT 0, MAX(position)+1 FROM questions; 

を動作するはずです、あなたはそれは私がちょうどあなたの例から外れ、その値をコピーし、適切な何かのためのセットのように、0値を処理する必要があります。

クエリで使用するストアドプロシージャを作成したり、MAX(位置)を決定し、新しく作成した行にストアするトリガを設定することもできます。

そこにオプションのかなり多くを、私は具体的な計算にデフォルト値を設定する方法はありません

0

(位置のインデックスを持つ)しかし、上記の溶液のために行くだろう、それはそうです。

関連する問題