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

BEFORE INSERTトリガーを使用して、テーブルに値を挿入するためのCHECK CONSTRAINTをエミュレートするにはどうすればよいですか?


MySQLは参照整合性のために外部キーをサポートしていますが、CHECK制約はサポートしていません。ただし、トリガーを使用してそれらをエミュレートできます。以下に示す例を使用して説明できます-

次のように、2文字、ダッシュ、3桁、ダッシュ、2文字のような修正構文登録番号を持つことができる「car」という名前のテーブルがあるとします-

mysql> Create table car (number char(9));
Query OK, 0 rows affected (0.32 sec)

mysql> Insert into car values('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

上記の値は有効な値ですが、次のクエリに挿入する値についてはどうでしょうか。

mysql> insert into car values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

上記の値は、使用している固定構文に反する数字の間に文字が含まれているため、有効な値ではありません。

BEFORE INSERTトリガーを作成して、値を挿入するためのCHECKCONSTRAINTをエミュレートします-

これで、このような挿入を防ぐために、次のようにトリガーを作成できます-

mysql> delimiter //
mysql> create trigger car_insert_value before insert 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.15 sec)
mysql> Delimiter ;

mysql> Delete from car;
Query OK, 2 rows affected (0.06 sec)

これで、間違った番号を挿入しようとすると、上記で作成されたトリガーによってその挿入が停止され、次のようなエラーがスローされます-

mysql> insert into car values('AB-2X5-YZ');
ERROR 1644 (45000): Not a Valid Number

ただし、次のように有効な値を挿入できます-

mysql> insert into car values('AB-235-YZ');
Query OK, 1 row affected (0.04 sec)

  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のテーブルにチェック制約を追加するにはどうすればよいですか?

    テーブルにチェック制約を追加するには、最初にテーブルを作成しましょう。 CREATE table yourTableName (    Column_name1 datatyep,    .    .    .    .    Column_name N datatype,    check( condition) ); 以下は、チェック制約を作成して年齢をチェックする方法です。 check(Age>=45) ここでテーブルを作成し、テーブルを作