У вас есть два варианта:
Удалите пустые значения - например, обновить строки со значением NULL, чтобы они имели какое-либо значение; или удалите строки.
Сделать ограничение недействительным для существующих данных - это приведет к сбою ограничения только для вновь вставленных или обновленных строк.
ALTER TABLE neue_buch MODIFY preis NOT NULL NOVALIDATE;
Оба подхода имеют свои плюсы и минусы. Вариант 1 лучше для производительности, потому что CBO может полагаться на ограничение при оптимизации запросов. Однако, если вы просто не знаете , какими должны быть значения NULL, у вас может возникнуть желание заменить их на «индикатор нулевого значения», то есть магическое значение - например, для столбца, который имеет только положительные целые числа, вы можете заменить NULL -1 или чем-то еще, но это имеет свои недостатки. Вариант 2 может быть предпочтительным в этом случае, чтобы избежать использования магических значений.