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