2017-11-09 4 views
0

私のデータベースのテーブルの1つにチェック制約を追加する問題が発生しました。チェック制約の目的は、水曜日の12:00を過ぎた時刻が存在しないことを確認することです。私はすでに、私はそれを追加しようとすると、しかし、表には、このルールに遵守していたデータを追加したPostgreSQLのチェック制約がコード内の2つの条件を選択しない

alter table module_daytime 
    add CONSTRAINT CHK_TimeWED CHECK (Time BETWEEN '9:00' AND '12:00' AND Day='Wednesday') 

、それはまだ私のテーブルの行が言ったルールに違反していると言う:これは私が持っているものです。なにが問題ですか?

+0

はあなたがMySQLを使っていますか? MySQLはCHECK制約で何もしません。エラーメッセージは表示されません。 –

+0

「SELECT @@ version;」というクエリを実行して、その内容を教えてください。 –

+0

これは私がMySqlについて嫌うことの1つです。チェック制約を作成するときにエラーが発生してもそれは無視されます。 –

答えて

0

問題を再現できません(下記参照)。あなたはテーブルを再現し、その制約のためのデータをテストしようとすることができますか?

create table module_daytime("time" time, day varchar(20)); 
insert into module_daytime values ('12:00', 'Wednesday'); 
 
1 rows affected 
select * from module_daytime; 
 
time  | day  
:------- | :-------- 
12:00:00 | Wednesday 
alter table module_daytime 
    add CONSTRAINT CHK_TimeWED CHECK (Time BETWEEN '9:00' AND '12:00' AND Day='Wednesday'); 
insert into module_daytime values ('12:00', 'Wednesday'); 
 
1 rows affected 
insert into module_daytime values ('12:01', 'Wednesday'); 
 
ERROR: new row for relation "module_daytime" violates check constraint "chk_timewed" 
DETAIL: Failing row contains (12:01:00, Wednesday). 

dbfiddle here

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、「[** Click The Tick **](https://ibb.co/ikqyO6)」という回答を受け入れるあなたが受け入れるごとに2つの評判ポイントを得る** ps –