1

データベーステーブルでは、ある種の文字列を主キーとして使用することを前提としています。自動インクリメントの数値列を使用せずに数値ベースの演算を実行できますか?

この場合、自動インクリメントの数値フィールドの使用を避けたいと思います。

  • テーブルの最初の200行を選択:

    それはのようなアクションを作るために私を防ぎますか?

  • テーブルの30行を選択します。ここで、特定の列の内容は特定の値と等しくなりますか?

答えて

1

tl; dr:なしORDER BYLIMIT句はランダムな行を自由に選ぶことができます。

それは...

SELECT something FROM sometable WHERE condition LIMIT 200 

テーブル行の限られた数を選択するのは簡単です、あなたが直面している問題は、このです:SQLは、行の順序のいずれかの作り付けの概念がありません。このクエリはテーブルから200行を表示しますが、実際には行は実際にはと予測できません。

同じクエリを発行した場合、ほとんどのSQL実装(MySQLおよび他のサーバ)は同じ200行を提供しますが、これは保証されません。この同じ行の振る舞いに頼ると、サーバがあなたに与えた行を変更することを決定したときに厄介な問題を引き起こす可能性があります。これはバージョンアップグレードの前後で発生する可能性があります。また、テーブルが大きくなり、サーバーのクエリプランナーに大きなセットのサブセットを取得する新しい方法が用意されている場合にも発生する可能性があります。

あなたが書いたように、予測可能な方法で「テーブルの最初の200行を選択する」場合は、順序を定義する何らかの方法が必要です。自動インクリメントIDはこれを行う1つの方法ですが、あなたはそれを排除しました。 insert_date列があり、「最初」は「最も古い」を意味します。可能であれば

SELECT something FROM sometable WHERE condition ORDER BY insert_date LIMIT 200 
+0

経験よりも優先度が高く、利点よりも問題が少ない場合は、自動インクリメントされたID列を追加します。不要な場合は避けるだけです。 –

+0

自動「id」列は、主キーと順序付けを取得するのに適しています。また、このテーブルを他の人にジョインする必要がある場合は、パフォーマンス面で便利です。正当な理由がない限り、あなたが表現している実際のデータには、 'id'カラムを省略するとそれをインクルードするのが良いでしょう。 –

関連する問題