Search code examples
mysqlsqlsql-insertcreate-tablecheck-constraints

How to create a CHECK constraint to allow certain strings in a table - MYSQL 8


I need to make it possible to only store the values of 'FIRST', 'BUSINESS' OR 'ECONOMY' in a table. However when I try to do this, the error is shown as:

Error 3819. Check constraint 'seat_check1' is violated. I have looked through the insert statements and the values that were input were not violating the check constraint.

Here is what I have so far:

ALTER TABLE SEATING ADD CONSTRAINT seat_check1 CHECK (LIKE 'FIRST' OR 'BUSINESS' OR 'ECONOMY');

Here is the table I am trying to add the constraint to:

CREATE TABLE SEATING (
flightNumber    CHAR(6),            /* Flight number */
departAirport   VARCHAR(50),        /* Departure airport */
departTime      DATETIME,           /* Departure date and time */
class           CHAR(10),           /* class of the seat */
available       DECIMAL(3),         /* Available number of Seat so far */
CONSTRAINT SEATING_PK PRIMARY KEY(flightNumber, departAirport, departTime, class),
CONSTRAINT SEATING_FK1 FOREIGN KEY(flightNumber, departAirport, departTime) REFERENCES FLIGHT(flightNumber, departAirport, departTime));

And here are the insert statements:

INSERT INTO SEATING VALUES ('QF8764', 'SYD', STR_TO_DATE('10/05/2019 08:45', '%d/%m/%Y %H:%i'), 'ECONOMY', 120);
INSERT INTO SEATING VALUES ('QF8764', 'SYD', STR_TO_DATE('10/05/2019 08:45', '%d/%m/%Y %H:%i'), 'BUSINESS', 10);
INSERT INTO SEATING VALUES ('QF322', 'AKL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'ECONOMY', 176);
INSERT INTO SEATING VALUES ('QF322', 'AKL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'BUSINESS', 15);
INSERT INTO SEATING VALUES ('QF140', 'AKL', STR_TO_DATE('18/05/2019 06:30', '%d/%m/%Y %H:%i'), 'BUSINESS', 40);
INSERT INTO SEATING VALUES ('QF140', 'AKL', STR_TO_DATE('18/05/2019 06:30', '%d/%m/%Y %H:%i'), 'ECONOMY', 140);
INSERT INTO SEATING VALUES ('JQ402', 'SYD', STR_TO_DATE('23/04/2019 07:05', '%d/%m/%Y %H:%i'), 'FIRST', 10);
INSERT INTO SEATING VALUES ('JQ402', 'SYD', STR_TO_DATE('23/04/2019 07:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 90);
INSERT INTO SEATING VALUES ('QF860', 'SYD', STR_TO_DATE('23/04/2019 07:10', '%d/%m/%Y %H:%i'), 'FIRST', 16);
INSERT INTO SEATING VALUES ('QF860', 'SYD', STR_TO_DATE('23/04/2019 07:10', '%d/%m/%Y %H:%i'), 'ECONOMY', 35);
INSERT INTO SEATING VALUES ('VA505', 'SYD', STR_TO_DATE('24/04/2019 07:10', '%d/%m/%Y %H:%i'), 'BUSINESS', 21);
INSERT INTO SEATING VALUES ('VA505', 'SYD', STR_TO_DATE('24/04/2019 07:10', '%d/%m/%Y %H:%i'), 'ECONOMY', 120);
INSERT INTO SEATING VALUES ('JQ404', 'SYD', STR_TO_DATE('26/04/2019 08:50', '%d/%m/%Y %H:%i'), 'BUSINESS', 3);
INSERT INTO SEATING VALUES ('JQ404', 'SYD', STR_TO_DATE('26/04/2019 08:50', '%d/%m/%Y %H:%i'), 'ECONOMY', 32);
INSERT INTO SEATING VALUES ('QF862', 'SYD', STR_TO_DATE('18/05/2019 11:45', '%d/%m/%Y %H:%i'), 'BUSINESS', 0);
INSERT INTO SEATING VALUES ('QF862', 'SYD', STR_TO_DATE('18/05/2019 11:45', '%d/%m/%Y %H:%i'), 'ECONOMY', 2);
INSERT INTO SEATING VALUES ('JQ404', 'SYD', STR_TO_DATE('26/04/2019 13:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 21);
INSERT INTO SEATING VALUES ('JQ404', 'SYD', STR_TO_DATE('26/04/2019 13:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 67);
INSERT INTO SEATING VALUES ('VA523', 'SYD', STR_TO_DATE('26/04/2019 13:10', '%d/%m/%Y %H:%i'), 'BUSINESS', 12);
INSERT INTO SEATING VALUES ('VA523', 'SYD', STR_TO_DATE('26/04/2019 13:10', '%d/%m/%Y %H:%i'), 'ECONOMY', 32);
INSERT INTO SEATING VALUES ('VA523', 'SYD', STR_TO_DATE('10/05/2019 15:10', '%d/%m/%Y %H:%i'), 'BUSINESS', 10);
INSERT INTO SEATING VALUES ('VA523', 'SYD', STR_TO_DATE('10/05/2019 15:10', '%d/%m/%Y %H:%i'), 'ECONOMY', 22);
INSERT INTO SEATING VALUES ('VA500', 'OOL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'BUSINESS', 1);
INSERT INTO SEATING VALUES ('VA500', 'OOL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'ECONOMY', 15);
INSERT INTO SEATING VALUES ('JQ401', 'OOL', STR_TO_DATE('18/05/2019 06:10', '%d/%m/%Y %H:%i'), 'BUSINESS', 7);
INSERT INTO SEATING VALUES ('JQ401', 'OOL', STR_TO_DATE('18/05/2019 06:10', '%d/%m/%Y %H:%i'), 'ECONOMY', 47);
INSERT INTO SEATING VALUES ('JQ403', 'OOL', STR_TO_DATE('18/05/2019 07:55', '%d/%m/%Y %H:%i'), 'BUSINESS', 20);
INSERT INTO SEATING VALUES ('JQ403', 'OOL', STR_TO_DATE('18/05/2019 07:55', '%d/%m/%Y %H:%i'), 'ECONOMY', 52);
INSERT INTO SEATING VALUES ('JQ409', 'OOL', STR_TO_DATE('18/05/2019 10:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 9);
INSERT INTO SEATING VALUES ('JQ409', 'OOL', STR_TO_DATE('18/05/2019 10:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 74);
INSERT INTO SEATING VALUES ('JQ501', 'SYD', STR_TO_DATE('05/05/2019 06:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 28);
INSERT INTO SEATING VALUES ('JQ501', 'SYD', STR_TO_DATE('05/05/2019 06:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 243);
INSERT INTO SEATING VALUES ('QF401', 'SYD', STR_TO_DATE('05/05/2019 06:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 26);
INSERT INTO SEATING VALUES ('QF401', 'SYD', STR_TO_DATE('05/05/2019 06:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 198);
INSERT INTO SEATING VALUES ('VA808', 'SYD', STR_TO_DATE('05/05/2019 07:00', '%d/%m/%Y %H:%i'), 'BUSINESS', 16);
INSERT INTO SEATING VALUES ('VA808', 'SYD', STR_TO_DATE('05/05/2019 07:00', '%d/%m/%Y %H:%i'), 'ECONOMY', 120);
INSERT INTO SEATING VALUES ('QF400', 'MEL', STR_TO_DATE('11/05/2019 06:00', '%d/%m/%Y %H:%i'), 'BUSINESS', 36);
INSERT INTO SEATING VALUES ('QF400', 'MEL', STR_TO_DATE('11/05/2019 06:00', '%d/%m/%Y %H:%i'), 'ECONOMY', 268);
INSERT INTO SEATING VALUES ('QF408', 'MEL', STR_TO_DATE('11/05/2019 07:00', '%d/%m/%Y %H:%i'), 'FIRST', 5);
INSERT INTO SEATING VALUES ('QF408', 'MEL', STR_TO_DATE('11/05/2019 07:00', '%d/%m/%Y %H:%i'), 'BUSINESS', 12);
INSERT INTO SEATING VALUES ('QF408', 'MEL', STR_TO_DATE('11/05/2019 07:00', '%d/%m/%Y %H:%i'), 'ECONOMY', 132);
INSERT INTO SEATING VALUES ('VA815', 'MEL', STR_TO_DATE('11/05/2019 07:30', '%d/%m/%Y %H:%i'), 'BUSINESS', 0);
INSERT INTO SEATING VALUES ('VA815', 'MEL', STR_TO_DATE('11/05/2019 07:30', '%d/%m/%Y %H:%i'), 'ECONOMY', 0);
INSERT INTO SEATING VALUES ('CA3101', 'SYD', STR_TO_DATE('26/05/2019 22:15', '%d/%m/%Y %H:%i'), 'BUSINESS', 45);
INSERT INTO SEATING VALUES ('CA3101', 'SYD', STR_TO_DATE('26/05/2019 22:15', '%d/%m/%Y %H:%i'), 'ECONOMY', 320);
INSERT INTO SEATING VALUES ('CA3101', 'SYD', STR_TO_DATE('26/05/2019 22:15', '%d/%m/%Y %H:%i'), 'FIRST', 8);
INSERT INTO SEATING VALUES ('QF129', 'SYD', STR_TO_DATE('26/05/2019 09:35', '%d/%m/%Y %H:%i'), 'BUSINESS', 45);
INSERT INTO SEATING VALUES ('QF129', 'SYD', STR_TO_DATE('26/05/2019 09:35', '%d/%m/%Y %H:%i'), 'ECONOMY', 150);
INSERT INTO SEATING VALUES ('QF129', 'SYD', STR_TO_DATE('26/05/2019 09:35', '%d/%m/%Y %H:%i'), 'FIRST', 14);
INSERT INTO SEATING VALUES ('QF4014', 'PEK', STR_TO_DATE('10/05/2019 07:35', '%d/%m/%Y %H:%i'), 'BUSINESS', 18);
INSERT INTO SEATING VALUES ('QF4014', 'PEK', STR_TO_DATE('10/05/2019 07:35', '%d/%m/%Y %H:%i'), 'ECONOMY', 22);
INSERT INTO SEATING VALUES ('QF4014', 'PEK', STR_TO_DATE('10/05/2019 07:35', '%d/%m/%Y %H:%i'), 'FIRST', 5);
INSERT INTO SEATING VALUES ('QF497', 'SYD', STR_TO_DATE('26/05/2019 22:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 16);
INSERT INTO SEATING VALUES ('QF497', 'SYD', STR_TO_DATE('26/05/2019 22:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 25);
INSERT INTO SEATING VALUES ('QF497', 'SYD', STR_TO_DATE('26/05/2019 22:05', '%d/%m/%Y %H:%i'), 'FIRST', 3);
INSERT INTO SEATING VALUES ('CA2842', 'PEK', STR_TO_DATE('10/05/2019 22:05', '%d/%m/%Y %H:%i'), 'BUSINESS', 1);
INSERT INTO SEATING VALUES ('CA2842', 'PEK', STR_TO_DATE('10/05/2019 22:05', '%d/%m/%Y %H:%i'), 'ECONOMY', 10);
INSERT INTO SEATING VALUES ('CA2842', 'PEK', STR_TO_DATE('10/05/2019 22:05', '%d/%m/%Y %H:%i'), 'FIRST', 0);

Solution

  • This should be as simple as:

    ALTER TABLE SEATING ADD CONSTRAINT seat_check1 CHECK (class IN ('FIRST', 'BUSINESS', 'ECONOMY'));
    

    Or as part as your CREATE TABLE statement:

    CREATE TABLE SEATING (
        flightNumber    CHAR(6),        
        departAirport   VARCHAR(50),
        departTime      DATETIME,
        class           CHAR(10) CHECK(class in ('FIRST', 'BUSINESS', 'ECONOMY')),
        available       DECIMAL(3),
        CONSTRAINT SEATING_PK PRIMARY KEY(flightNumber, departAirport, departTime, class),
        CONSTRAINT SEATING_FK1 FOREIGN KEY(flightNumber, departAirport, departTime) REFERENCES FLIGHT(flightNumber, departAirport, departTime)
    );