MySQLでCHECK制約を使用したいが、サポートされていない。 (他のRDBMSと違って、それはCHECKsを理解しますが、強制はしません)MySQLトリガーはCHECK制約をシミュレートできますか?
私はトリガーでいくつかの回避策を見てきました。しかし、エラーを返すのではなく、問題のフィールドにデフォルト値を設定する傾向があります。
条件が満たされない場合にエラーを返すトリガーを構築することは可能ですか?
最終的に私はCHECK制約をコピーするトリガーが必要です。
MySQLでCHECK制約を使用したいが、サポートされていない。 (他のRDBMSと違って、それはCHECKsを理解しますが、強制はしません)MySQLトリガーはCHECK制約をシミュレートできますか?
私はトリガーでいくつかの回避策を見てきました。しかし、エラーを返すのではなく、問題のフィールドにデフォルト値を設定する傾向があります。
条件が満たされない場合にエラーを返すトリガーを構築することは可能ですか?
最終的に私はCHECK制約をコピーするトリガーが必要です。
あなたがデータを更新する際には、次の構文
CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
DECLARE dummy INT;
SELECT Your meaningful error message goes here INTO dummy
FROM mytable
WHERE mytable.id=new.id
END IF; END;
MySQL 5.5以降では、SIGNAL構文を使用して、トリガなどのストアドプロシージャからエラーを返すことができます。
を試してみてください:あなたはデータを挿入する際
delimiter $$
create trigger chk_stats1 before update on stats
for each row
begin
if new.month>12 then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: only';
end if;
end;
$$
:
delimiter $$
create trigger chk_stats before insert on stats
for each row
begin
if new.month>12 then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: only';
end if;
end;
$$
これらのトリガーはチェック制約、作品として動作します挿入または更新する前にチェックし、month> 12の場合はエラーを返します。
あなたの 'CHECK'制約は何ですか?チェック制約の1つの特定のタイプは、外部キー制約によってエミュレートできます。 –
FK制約があなたの後でない場合、スローするためのトリガーを得ることができます。これを見て:http://stackoverflow.com/questions/24/throw-an-error-in-mysql-trigger –
@ypercubeに: のようなものになる可能性があります。 ( \t id INT PRIMARY KEY (数字> 0) ); – smnsvane