#mysql #sql
#mysql #sql
Вопрос:
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)
);
Комментарии:
1. Ошибка и код — MySQL, поэтому я исправил тег.
Ответ №1:
MySQL начал поддерживать ограничения проверки только в MySQL 8.0.16, выпущенном в апреле 2019 года.
До этого синтаксис был разрешен (хотя, возможно, с ограничениями), но ничего не произошло.
Что происходит в вашем коде, так это то, что у вас есть:
Processing_Cost int check(Processing_Cost>500),
Service_Charge numeric check(.12*Processing_Cost>=Service_Charge)
Это встроенные ограничения проверки. Это означает, что они являются частью определения столбца. Вы можете исправить это, просто добавив запятые:
Processing_Cost int,
check (Processing_Cost > 500),
Service_Charge numeric,
check (0.12*Processing_Cost >= Service_Charge)
Мне нравится делать мои ограничения очевидными, поэтому я бы поместил их после столбцов и дал им имена:
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)
Здесь находится db<>fiddle.
Примечание: Не используйте char()
для типов столбцов — оно заполняет строку пробелами. Использовать varchar()
.
Комментарии:
1. Большое вам спасибо @GORDON LINOFF
2. Очень полезная информация!