ALTER в Oracle SQL — как изменить таблицу, схему или объект

🟢 ALTER в Oracle SQL. Введение

Оператор ALTER в Oracle SQL используется для изменения уже существующих объектов базы данных: таблиц, представлений, индексов, последовательностей, пользователей и других. Это один из самых мощных DDL-инструментов, позволяющий гибко управлять структурой базы данных без её удаления или пересоздания.


🖋️ Синтаксис команды ALTER (основные варианты)

ALTER TABLE имя_таблицы действие;
ALTER VIEW имя_представления действие;
ALTER USER имя_пользователя действие;
ALTER INDEX имя_индекса действие;
ALTER SEQUENCE имя_последовательности действие;

🔄 Где используется ALTER в Oracle SQL

  • Добавление/удаление столбцов и ограничений
  • Переименование объектов
  • Изменение параметров пользователей и прав
  • Настройка последовательностей и индексов
  • Поддержка миграций и версионирования БД

📊 Примеры использования ALTER в Oracle SQL (1–50 из 50)

  1. Добавить столбец:
ALTER TABLE employees ADD department_code VARCHAR2(10);
  1. Удалить столбец:
ALTER TABLE employees DROP COLUMN commission_pct;
  1. Изменить тип столбца:
ALTER TABLE employees MODIFY salary NUMBER(10,2);
  1. Добавить ограничение NOT NULL:
ALTER TABLE employees MODIFY last_name NOT NULL;
  1. Установить значение по умолчанию:
ALTER TABLE employees MODIFY hire_date DEFAULT SYSDATE;
  1. Переименовать таблицу:
ALTER TABLE temp_employees RENAME TO employees_backup;
  1. Переименовать столбец:
ALTER TABLE employees RENAME COLUMN job_title TO position;
  1. Добавить внешний ключ:
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
  1. Удалить внешний ключ:
ALTER TABLE orders DROP CONSTRAINT fk_customer;
  1. Добавить первичный ключ:
ALTER TABLE departments ADD CONSTRAINT pk_dept PRIMARY KEY (department_id);
  1. Отключить ограничение:
ALTER TABLE employees DISABLE CONSTRAINT pk_employees;
  1. Включить ограничение:
ALTER TABLE employees ENABLE CONSTRAINT pk_employees;
  1. Сделать столбец уникальным:
ALTER TABLE products ADD CONSTRAINT uq_sku UNIQUE (sku);
  1. Удалить уникальное ограничение:
ALTER TABLE products DROP CONSTRAINT uq_sku;
  1. Добавить CHECK ограничение:
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary >= 0);
  1. Удалить CHECK ограничение:
ALTER TABLE employees DROP CONSTRAINT chk_salary;
  1. Добавить индекс:
CREATE INDEX emp_last_name_ix ON employees(last_name);
  1. Переименовать индекс:
ALTER INDEX emp_last_name_ix RENAME TO emp_ln_ix;
  1. Восстановить индекс:
ALTER INDEX emp_ln_ix REBUILD;
  1. Удалить индекс:
DROP INDEX emp_ln_ix;
  1. Изменить кеш последовательности:
ALTER SEQUENCE seq_invoice_id CACHE 100;
  1. Изменить минимальное значение:
ALTER SEQUENCE seq_invoice_id MINVALUE 1000;
  1. Переименовать последовательность:
RENAME seq_invoice_id TO seq_invoice_new;
  1. Изменить пользователя:
ALTER USER test IDENTIFIED BY newpass123;
  1. Заблокировать пользователя:
ALTER USER test ACCOUNT LOCK;
  1. Разблокировать пользователя:
ALTER USER test ACCOUNT UNLOCK;
  1. Назначить профиль:
ALTER USER test PROFILE default;
  1. Установить значение по умолчанию для всей таблицы:
ALTER TABLE employees MODIFY status DEFAULT 'ACTIVE';
  1. Удалить значение по умолчанию:
ALTER TABLE employees MODIFY status DEFAULT NULL;
  1. Добавить несколько столбцов сразу:
ALTER TABLE employees ADD (region_id NUMBER, manager_code VARCHAR2(10));
  1. Удалить несколько столбцов:
ALTER TABLE employees DROP (region_id, manager_code);
  1. Удалить все ограничения с CASCADE:
DROP TABLE orders CASCADE CONSTRAINTS;
  1. Добавить столбец с DEFAULT и NOT NULL:
ALTER TABLE departments ADD is_active CHAR(1) DEFAULT 'Y' NOT NULL;
  1. Установить таблицу как READ ONLY:
ALTER TABLE logs READ ONLY;
  1. Сделать таблицу вновь доступной для записи:
ALTER TABLE logs READ WRITE;
  1. Включить партиционирование:
ALTER TABLE sales MODIFY PARTITION BY RANGE (sale_date);
  1. Добавить новую партицию:
ALTER TABLE sales ADD PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01','YYYY-MM-DD'));
  1. Удалить партицию:
ALTER TABLE sales DROP PARTITION p_2022;
  1. Изменить настройки временной таблицы:
ALTER TABLE session_data MODIFY SEGMENT CREATION DEFERRED;
  1. Переместить таблицу в другое пространство:
ALTER TABLE archive_data MOVE TABLESPACE archive_ts;
  1. Установить сжатие:
ALTER TABLE documents COMPRESS FOR ALL OPERATIONS;
  1. Изменить привилегии роли:
ALTER ROLE analyst NOT IDENTIFIED;
  1. Изменить параметры SYSTEM:
ALTER SYSTEM SET open_cursors = 500 SCOPE=BOTH;
  1. Установить синоним:
CREATE OR REPLACE SYNONYM emp FOR employees;
  1. Удалить синоним:
DROP SYNONYM emp;
  1. Переместить индекс:
ALTER INDEX emp_ln_ix REBUILD TABLESPACE index_ts;
  1. Изменить статистику таблицы:
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES');
  1. Изменить хранение таблицы:
ALTER TABLE logs STORAGE (INITIAL 1M NEXT 1M);
  1. Добавить комментарий:
COMMENT ON COLUMN employees.status IS 'Active/inactive flag';
  1. Переименовать представление:
ALTER VIEW emp_summary RENAME TO emp_summary_2024;

📆 Заключение: зачем использовать ALTER в Oracle SQL

ALTER — незаменимый инструмент в руках администратора и разработчика. Он позволяет изменять структуру без потери данных, обновлять ограничения, управлять пользователями и поддерживать архитектуру базы данных в актуальном состоянии.


🔜 Следующая статья:

MODEL в Oracle SQL: продвинутые вычисления и прогнозы прямо в запросе


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии