x
CREATE TABLE Customer_Details
(
Customer_Id int(4) auto_increment,
C_FirstName char(20),
C_LastName char(20),
PRIMARY KEY (Customer_Id),
C_Temperature decimal(5,2),
Mail_Id char(20) unique not null,
Customer_Ref_Number char(10) , CONSTRAINT CHECK_UC
CHECK(BINARY Customer_Ref_Number = UPPER(Customer_Ref_Number)),
Processing_Cost int check(Processing_Cost>500),
Service_Charge numeric check(.12*Processing_Cost>=Service_Charge)
);
Advertisement
Answer
MySQL only started supporting check constraints in MySQL 8.0.16 — released in April 2019.
Prior to that, the syntax was allowed (although perhaps with limitations), but nothing happened.
What is happening in your code is that you have:
Processing_Cost int check(Processing_Cost>500),
Service_Charge numeric check(.12*Processing_Cost>=Service_Charge)
These are inline check constraints. That means they are part of the column definition. You can fix this just by adding commas:
Processing_Cost int,
check (Processing_Cost > 500),
Service_Charge numeric,
check (0.12*Processing_Cost >= Service_Charge)
I like to make my constraints obvious, so I would put them after the columns and give them names:
Processing_Cost int,
Service_Charge numeric,
constraint chk_customer_details_processing_cost check (Processing_Cost > 500),
constraint chk_customer_details_service_charge check (0.12*Processing_Cost >= Service_Charge)
Here is a db<>fiddle.
Note: Don’t use char()
for column types — it pads the string with spaces. Use varchar()
.