2016-05-02 4 views
0

ユーザあたりの行数を特定の数に制限するテーブルがあります。挿入する前に、ユーザーが記憶容量(行数)を超えたかどうかを確認し、必要に応じて挿入します。数< 10、MySQL - 挿入時に最大行を確認する

insert into items set user=123, a=xyx; 

しかし、このアプローチは2つのクエリを必要とする場合。たとえば、

select count(id) from items where user=123; 

は、言います1つのクエリで実行できる方法はありますか?

ありがとうございました

+0

を説明したアプローチで、条件付きのインサートを使用しようとすることができ、コードで1つのクエリを持っているしたい場合。しかし、それは実際には2つのクエリ –

+0

ではなく、代わりにプロシージャを使用することができます –

答えて

0

あなたが取るアプローチは、ほとんど2つのクエリが必要です。これをトリガで行うかアプリケーションコードで行うかは、選択の問題です。

メソッドを使用する場合は、items(user)にインデックスを追加します。これは、行の数を数えて安くするでしょう。

代わりに、各項目のユーザー表の値を増やすこともできます。したがって、ユーザーがアイテムを挿入すると、users.itemcountが増えます。ただし、アイテムを削除するときにカウントを減らすことを忘れないでください。

0

あなたはちょうどあなたがあなたがそれをチェックして、automaitcally必要に応じて挿入をキャンセルする挿入トリガーを使用することができ、ここでMySQL Conditional Insert

関連する問題