MySQLの整数カラムに正の整数制約を追加する方法
MySQLで整数カラムに正の整数のみを許可する方法
MySQLでカラムに負の数を入力できないようにするには、UNSIGNED属性を使用します。UNSIGNEDを指定した整数型カラムは負の値を受け付けず、正の整数と0のみを格納できます。
基本構文
CREATE TABLE yourTableName ( yourColumnName INT UNSIGNED );
テーブル作成の例
実際にテーブルを作成して動作を確認してみましょう。以下のクエリでテーブルを作成します。
mysql> create table OnlyPositiveValue - > ( - > Marks int UNSIGNED - > ); Query OK, 0 rows affected (0.58 sec)
厳格モードの設定
データを挿入する前に、以下のクエリでSTRICT_TRANS_TABLESモードを設定しておきます。このモードを有効にしておくと、範囲外の値を挿入しようとした際にエラーが発生し、無効なデータの登録を防げます。
mysql> SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES'; Query OK, 0 rows affected, 1 warning (0.00 sec)
負の数を挿入した場合のエラー
この状態でINSERTコマンドに負の数を指定すると、以下のようなエラーが表示されます。
mysql> insert into OnlyPositiveValue values(-10); ERROR 1264 (22003): Out of range value for column 'Marks' at row 1 mysql> insert into OnlyPositiveValue values(-100); ERROR 1264 (22003): Out of range value for column 'Marks' at row 1
正の数を挿入する
次に、正の数を挿入してみます。0もUNSIGNEDカラムでは有効な値として扱われます。
mysql> insert into OnlyPositiveValue values(0); Query OK, 1 row affected (0.17 sec) mysql> insert into OnlyPositiveValue values(10); Query OK, 1 row affected (0.14 sec) mysql> insert into OnlyPositiveValue values(100); Query OK, 1 row affected (0.11 sec)
レコードの確認
SELECT文を使ってテーブル内のすべてのレコードを表示します。
mysql> select *from OnlyPositiveValue;
以下の出力のように、正の数のみが格納されていることが確認できます。
+-------+ | Marks | +-------+ | 0 | | 10 | | 100 | +-------+ 3 rows in set (0.00 sec)
このように、INT UNSIGNEDを使用することで、カラムレベルで負の値の入力を防ぐことができます。ただし、UNSIGNEDは0以上の値を許可するため、厳密に「1以上の正の整数」のみを許可したい場合は、MySQL 8.0.16以降で強制適用されるCHECK制約(例:CHECK (Marks > 0))を併用する方法もあります。
-
MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説
MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query
-
MySQLクエリで列にユーザー定義の値を追加する方法
MySQLでは、UNION ALLを活用することで、既存の列の値に加えて、ユーザーが自由に定義した値をクエリ結果に追加できます。ここでは、ENUM型の列を持つテーブルを例に、その具体的な手順を解説します。 1. サンプルテーブルの作成 まず、ENUM型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1847 ( GameStatus ENUM(PENDING,COMPLETED,CANCELLED) ); Query OK