Как понимать это сообщение: кто виноват и что делать? Дело в том, что в таблице
«Самолеты» (aircrafts) уже есть строки. Однако во время добавления тех строк стол-
бец speed в таблице не присутствовал, поэтому при его добавлении сейчас значение
данного атрибута в этих строках будет отсутствовать, т. е. будет равно NULL. А мы
наложили ограничение NOT NULL, следовательно, ранее добавленные строки не от-
вечают новому ограничению. Как же можно выйти из этой ситуации? Один из ва-
риантов такой: сначала добавить столбец, не накладывая на его значения никаких
ограничений, затем ввести значения нового атрибута в уже существующие строки,
причем, эти значения должны удовлетворять тем ограничениям, которые мы соби-
раемся наложить. После этого накладываем все необходимые ограничения. Получаем
такую группу команд:
ALTER TABLE aircrafts ADD COLUMN speed integer;
UPDATE aircrafts SET speed = 807 WHERE aircraft_code = '733';
UPDATE aircrafts SET speed = 851 WHERE aircraft_code = '763';
UPDATE aircrafts SET speed = 905 WHERE aircraft_code = '773';
UPDATE aircrafts SET speed = 840
WHERE aircraft_code IN ( '319', '320', '321' );
UPDATE aircrafts SET speed = 786 WHERE aircraft_code = 'CR2';
UPDATE aircrafts SET speed = 341 WHERE aircraft_code = 'CN1';
UPDATE aircrafts SET speed = 830 WHERE aircraft_code = 'SU9';
SELECT * FROM aircrafts;
ALTER TABLE aircrafts ALTER COLUMN speed SET NOT NULL;
ALTER TABLE aircrafts ADD CHECK( speed >= 300 );
Проверьте, как изменилось определение таблицы, с помощью команды
\d aircrafts
Конечно, если необходимость наличия того или иного ограничения отпадет, его мож-
но удалить:
Достарыңызбен бөлісу: