MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで値を0未満にせずにデクリメントする方法

MySQLでは、UPDATE文を使用することで、カラムの値を簡単にデクリメント(1ずつ減算)できます。さらに、WHERE句に条件を追加することで、値が0未満にならないように制御することも可能です。この記事では、具体的な手順をサンプルコードとともに解説します。

基本構文

値を減らしつつ、0より下に行かないようにするには、次のような構文を使用します。

UPDATE テーブル名 SET カラム名 = カラム名 - 1 WHERE カラム名 > 0;

ポイントは WHERE カラム名 > 0 という条件部分です。この条件により、すでに0になっている行は更新対象から除外されるため、値がマイナスになることを防げます。

サンプルテーブルの作成

実際の動作を確認するため、まずテスト用のテーブルを作成しましょう。以下のクエリを実行します。

mysql> create table DecrementDemo
    -> (
    -> DecrementValue int
    -> );
Query OK, 0 rows affected (0.62 sec)

テストデータの挿入

次に、INSERT文を使ってサンプルデータを挿入します。

mysql> insert into DecrementDemo values(15),(14),(13),(12),(11),(10);
Query OK, 6 rows affected (0.18 sec)
Records: 6 Duplicates: 0 Warnings: 0

挿入データの確認

SELECT文ですべてのレコードを表示し、正しく登録されているか確認します。

mysql> select *from DecrementDemo;

実行結果は以下のとおりです。

+----------------+
| DecrementValue |
+----------------+
|             15 |
|             14 |
|             13 |
|             12 |
|             11 |
|             10 |
+----------------+
6 rows in set (0.00 sec)

デクリメントの実行

それでは、すべての値を1ずつ減算するUPDATE文を実行します。

mysql> update DecrementDemo
    -> set DecrementValue = DecrementValue - 1 where DecrementValue > 0;
Query OK, 6 rows affected (0.16 sec)
Rows matched: 6 Changed: 6 Warnings: 0

実行後の確認

値が正しく減算されたかどうか、再度SELECT文で確認してみましょう。

mysql> select *from DecrementDemo;

実行結果は以下のとおりです。すべての値が1ずつ減っていることがわかります。

+----------------+
| DecrementValue |
+----------------+
|             14 |
|             13 |
|             12 |
|             11 |
|             10 |
|              9 |
+----------------+
6 rows in set (0.00 sec)

まとめ

MySQLで値をデクリメントしながら0未満になるのを防ぐには、SET カラム名 = カラム名 - 1WHERE カラム名 > 0 を組み合わせるのがシンプルで効果的な方法です。在庫数やアクセスカウンターなど、負の値を許容したくない場面でぜひ活用してください。

  1. MySQLクエリで4番目に高い値を取得する方法(LIMIT OFFSET活用)

    MySQLで4番目に高い値を取得するには?テーブルから4番目に高い値を取得するには、ORDER BY句で降順に並べ替え、LIMITとOFFSETを組み合わせるのが最もシンプルな方法です。まずは、動作を確認するためのサンプルテーブルを作成しましょう。mysql> create table DemoTable (     Amount int ); Query OK, 0 rows affected (0.88 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable va

  2. MySQLのLIKEクエリで「%」を含む列値を検索する方法【エスケープ処理の基本】

    MySQLのLIKEクエリで「%」を含む値を検索するには?MySQLでは、「%」はLIKE句におけるワイルドカードとして機能するため、そのまま検索することはできません。「%」という文字そのものを含む列値を検索したい場合は、バックスラッシュ(\)によるエスケープ処理が必要です。基本構文「%」を含む列値を検索する場合の構文は以下の通りです。select * from yourTableNamewhere yourColumnName LIKE \%%;ポイントは、検索対象の「%」の直前に「\(バックスラッシュ)」を付けることです。これにより、ワイルドカードではなく通常の文字として扱われます。実際に