BEFORE UPDATEトリガーを使用して、テーブルの値を更新するためのCHECK CONSTRAINTをエミュレートするにはどうすればよいですか?
MySQLは参照整合性のために外部キーをサポートしていますが、CHECK制約はサポートしていません。ただし、トリガーを使用してそれらをエミュレートできます。以下に示す例を使用して説明できます-
例
次のように、2文字、ダッシュ、3桁、ダッシュ、2文字のような修正構文登録番号を持つことができる「car」という名前のテーブルがあるとします-
mysql> Create table car (number char(9)); Query OK, 0 rows affected (0.32 sec)
BEFORE UPDATEトリガーを作成して、値を更新するためのCHECKCONSTRAINTをエミュレートします-
ここで、テーブルを誤った値で更新しようとした場合、MySQLは次のように更新を停止しません-
mysql> update car set number='AB-2X5-YZ'; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0
上記のクエリにより、テーブル「car」の誤った値が更新されました。次のクエリでは、BEFORE UPDATEトリガーを作成します。これにより、テーブル内の誤ったデータを更新できなくなります-
mysql> delimiter // mysql> create trigger car_update_value before update on car -> for each row -> begin -> if new.number not rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$' -> then -> signal sqlstate '45000' set message_text = 'Not a valid number'; -> end if; -> end // Query OK, 0 rows affected (0.11 sec) mysql> Delimiter ; mysql> update car set number='AB-2X5-YZ'; ERROR 1644 (45000): Not a valid number
-
VIEWSを使用してCHECKCONSTRAINTをエミュレートするにはどうすればよいですか?
MySQLは参照整合性のために外部キーをサポートしていますが、CHECK制約はサポートしていません。ただし、トリガーを使用してそれらをエミュレートできます。以下に示す例を使用して説明できます- 例 「car1」という名前のテーブルがあり、次のように2文字、ダッシュ、3桁、ダッシュ、2文字のような修正構文登録番号を持つことができるとします- mysql> Create table car1 (number char(9)); Query OK, 0 rows affected (0.32 sec) mysql> Insert into car1 values('AB-235
-
MySQLでブール値を更新するにはどうすればよいですか?
UPDATEコマンドを使用してブール値を更新できます。 BOOLEANデータ型を使用する場合、MySQLはそれを内部でtinyint(1)に変換します。 trueまたはfalseリテラルを使用できます。ここで、trueは1からtinyint(1)を示し、falseは0からtinyint(1)を示します。 構文は次のとおりです- UPDATE yourTableName SET yourColumnName = yourValue WHERE yourCondition; 上記の構文を理解するために、テーブルを作成しましょう。テーブルを作成するためのクエリは次のとおりです- mysql>