Модификация таблиц

Конспект в доработке

    Общие сведения

    Для модификации таблица используется при изменении структуры таблицы, например изменение ограничения, типа данных атрибута, добавление или удаление атрибутов, добавление внешних ключей
    Добавить столбец:

    ALTER TABLE airports_data ADD COLUMN speed integer NOT NULL CHECK( speed >= 300 );

    Так как в таблице строки уже существуют, команда выдаст ошибку, так как есть ограничение NOT NULL. В таком случае есть смысл, сначала добавить колонку без ограничений, затем значения для данной колонки, только потом ограничения:

    #Добавить атрибут ALTER TABLE aircrafts ADD COLUMN speed integer; #Изменить значения атрибута speed 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'; ..... ..... #Добавить ограничения ALTER TABLE aircrafts ALTER COLUMN speed SET NOT NULL; ALTER TABLE aircrafts ADD CHECK( speed >= 300 );

    Удалить ограничения:

    ALTER TABLE aircrafts ALTER COLUMN speed DROP NOT NULL; ALTER TABLE aircrafts DROP CONSTRAINT aircrafts_speed_check;

    Для удаления ограничения типа CHECK, необходимо указывать имя ограничения, которое можно выяснить с помощью команды \d name_table
    Удалить столбец:

    ALTER TABLE aircrafts DROP COLUMN speed; Изменение типа данных: ALTER TABLE airports ALTER COLUMN longitude SET DATA TYPE numeric( 5,2 ) ;

    Допустим необходимо изменить в таблице seats для fare_conditions тип char на integer и в зависимости от значения выставить код в формате int, для этого:

    demo=# ALTER TABLE seats DROP CONSTRAINT seats_fare_conditions_check , ALTER COLUMN fare_conditions SET DATA TYPE integer USING ( CASE WHEN fare_conditions = 'Economy' THEN 1 WHEN fare_conditions = 'Business' THEN 2 ELSE 3 END );

    В данном примере, прежде чем менять тип, было удалено ограничение для данного атрибута
    Далее необходимо связать две таблицы с одинаковым атрибутом, т.е. создается внешний ключ:

    demo=# ALTER TABLE seats ADD FOREIGN KEY ( fare_conditions ) REFERENCES fare_conditions ( fare_conditions_code );

    Ссылочная таблица:

    demo=# \d fare_conditions Table "bookings.fare_conditions" Column | Type | Collation | Nullable | Default ----------------------+-----------------------+-----------+----------+--------- fare_conditions_code | integer | | not null | fare_conditions_name | character varying(10) | | not null | Indexes: "fare_conditions_pkey" PRIMARY KEY, btree (fare_conditions_code) Referenced by: TABLE "seats" CONSTRAINT "seats_fare_conditions_fkey" FOREIGN KEY (fare_conditions) REFERENCES fare_conditions(fare_conditions_code) demo=#

    Изменение имени атрибута:

    demo=# ALTER TABLE seats RENAME COLUMN fare_conditions TO fare_conditions_code ; Также необходимо изменить имя внешнего ключа для данного атрибута: demo=# ALTER TABLE seats RENAME CONSTRAINT seats_fare_conditions_fkey TO seats_fare_conditions_code_fkey ;

    Добавить ограничение UNIQUE для атрибута:

    demo=# alter table fare_conditions add unique ( fare_conditions_name ) ; ALTER TABLE demo=#
    Добавить ограничение

    Допустим необходимо добавить в таблицу progress ограничение для атрибута test_form

    ALTER TABLE progress ADD CHECK ( ( test_form = 'экзамен' AND mark IN ( 3, 4, 5 ) ) OR ( test_form = 'зачет' AND mark IN ( 0, 1 ) ) );

    В данном случае для атрибута test_form возможны только два значения 'экзамен' или 'зачет' и для каждого значения в атрибуте mark используется свой набор допустимых оценок


    Источники
    Последнее изменение: 28.10.2024 08:41


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ