Код ошибки: 3819. Нарушено ограничение проверки «checker_1»

Мой вопрос говорит о том, что он хочет, чтобы я добавил ограничение, чтобы компания не могла больше покупать автомобили, выпущенные до 2018 года. Проблема в том, что в моей базе данных уже есть информация об автомобилях, выпущенных до 2018 года. Я не могу удалить таблицу, потому что она будет возиться с некоторыми из моих других запросов. Могу я получить совет по этому поводу?

Мой код ниже для таблицы транспортных средств

create table Vehicle(
LicensePlate varchar(48) primary key,  /*Primary key for table Vehicle for License plate, variable can hold up to 48 characters*/
Make varchar (48),  
CarYear int 
);

insert into Vehicle (LicensePlate,Make,CarYear) values ('1234 AA','Toyota',1970);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1237 AB','Mazda',1995);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1892 BG','Toyota',2000);
insert into Vehicle (LicensePlate,Make,CarYear) values ('1876 FA','Nissan',1999);
insert into Vehicle (LicensePlate,Make,CarYear) values ('3021 AA','Mazda',1950);
insert into Vehicle (LicensePlate,Make,CarYear) values ('2134 FF','Toyota',1992);
-- Company has decided not to purchase any more car that were made before 2018. Add appropriate constraints to the Vehicle table to enforce this requirement.

alter table Vehicle add constraint checker_1 check (CarYear > 2018);

Пожалуйста, покажите нам структуру таблицы vehicle. Может быть, можно использовать другую колонку для идентификации недавно добавленных автомобилей?

GMB 01.11.2022 23:45

Вы хотите проверить текущие данные таблицы или хотите проверить при вставке новых данных в таблицу?

FanoFN 02.11.2022 00:31

я считаю, что это должно быть для проверки текущих данных, которые находятся в таблице.

mathina 02.11.2022 00:37

Если так, вы не можете добавить constraint в таблицу. Я предполагаю, что вы все еще используете данные, где CarYear < 2018, верно? Как насчет проверки в запросе?

FanoFN 02.11.2022 00:54

да, я все еще использую его в других запросах, поэтому я не могу удалить или изменить данные, как мне проверить это в запросе? Я еще немного новичок. не могу ли я применить его или это не сработает?

mathina 02.11.2022 01:00

В запросе вы просто добавляете WHERE CarYear > 2018, но если вам нужно показать все автомобили и в то же время определить, какие автомобили CarYear > 2018, вы можете добавить CASE в SELECT как CASE WHEN CarYear > 2018 THEN 1 ELSE 0 END AS car_year_chk в качестве другого столбца.

FanoFN 02.11.2022 01:05

Так ты имеешь в виду, что с этим можно работать? Или есть проблема с результатом, который он возвращает? Может быть, вы можете опубликовать ожидаемые результаты.

FanoFN 02.11.2022 02:32

это то, с чем я могу работать, большое спасибо за вашу помощь до сих пор.

mathina 02.11.2022 02:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
8
135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот запрос, если это возможно для вашей операции:

SELECT LicensePlate, Make, CarYear,
         CASE WHEN CarYear > 2018 THEN 1 ELSE 0 END AS car_year_chk
FROM Vehicle;

На ваших текущих демонстрационных данных вы получите следующий результат:

Номерной знак Сделать АвтомобильГод car_year_chk 1234 АА Тойота 1970 г. 0 1237 г. н.э. Мазда 1995 г. 0 1876 ​​ФА Ниссан 1999 г. 0 1892 г.р. Тойота 2000 г. 0 2134 ФФ Тойота 1992 г. 0 3021 АА Мазда 1950 г. 0

Демонстрационная рабочий пример

Буду ли я проверять это как запрос, чтобы обеспечить соблюдение правила - больше не покупать автомобили, выпущенные до 2018 года?

mathina 03.11.2022 15:49

Где это происходит? В веб-приложении? Думаю, если вы действительно хотите сделать что-то подобное, просто ограничьте результаты/вывод только автомобилями, выпущенными после 2018 года, напрямую используя WHERE CarYear > 2018. Если вы все еще хотите показать их все и отключить выбор автомобиля через веб-приложение (интерфейс), это другая программа / процесс, и я предлагаю вам опубликовать новый вопрос.

FanoFN 04.11.2022 01:01

Другие вопросы по теме