Skip to content Skip to sidebar Skip to footer

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;

LiveDemo

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

SqlFiddleDemo

Post a Comment for "Sql Check Constraint Not Working Properly"