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

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

  1. 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

  2. MySQLでブール値を更新するにはどうすればよいですか?

    UPDATEコマンドを使用してブール値を更新できます。 BOOLEANデータ型を使用する場合、MySQLはそれを内部でtinyint(1)に変換します。 trueまたはfalseリテラルを使用できます。ここで、trueは1からtinyint(1)を示し、falseは0からtinyint(1)を示します。 構文は次のとおりです- UPDATE yourTableName SET yourColumnName = yourValue WHERE yourCondition; 上記の構文を理解するために、テーブルを作成しましょう。テーブルを作成するためのクエリは次のとおりです- mysql>