Sql Check Constraint Not Working Properly
I have created a table schedule with a check constraint: mysql> create table schedule(order_date date, dely_date date check(dely_date>order_date)
Solution 1:
Oh, it is working properly. According to the manual:
The CHECK clause is parsed but ignored by all storage engines
You may want to try a db that is a little more sane.
Solution 2:
The CHECK constraint in MySQL is ignored as in Jakub Kania's answer
Example of working CHECK using SQL Server:
createtable #schedule(order_date date,
dely_date date,
check(dely_date>order_date));
insertinto #schedule values('2015-11-20','2014-12-25');
-- The INSERT statement conflicted with the CHECK constraint "CK_#schedule_A59B8DED". -- The conflict occurred in database "tempdb", table "dbo.#schedule___-- __________________00000000C9D8". The statement has been terminated.INSERTINTO #schedule values('2015-12-24','2015-12-25');
SELECT*FROM #schedule;
You can use trigger to do validation:
CREATETABLE `schedule`(id INTNOTNULL AUTO_INCREMENT PRIMARY KEY,
order_date DATETIME,
dely_date DATETIME);
CREATETRIGGER `schedule_trg_ins` BEFORE INSERTON `schedule`
FOREACHROWBEGIN
IF NOT(New.dely_date>New.order_date) THEN
SIGNAL SQLSTATE'10000'SET MESSAGE_TEXT ='check constraint on schedule failed during insert';
END IF;
END;
CREATETRIGGER `schedule_trg_upd` BEFORE UPDATEON `schedule`
FOREACHROWBEGIN
IF NOT(New.dely_date>New.order_date) THEN
SIGNAL SQLSTATE'10000'SET MESSAGE_TEXT ='check constraint on schedule failed during update';
END IF;
END;
INSERTINTO `schedule`(order_date, dely_date)
VALUES ('2015-12-24','2015-12-25');
INSERTINTO `schedule`(order_date, dely_date)
VALUES ('2015-12-26','2015-12-25');
-- check constraint on schedule failed during insertUPDATE `schedule`
SET order_date ='2015-12-26'WHERE id =1;
-- check constraint on schedule failed during update
Post a Comment for "Sql Check Constraint Not Working Properly"