
В Oracle таблица – это структурированное хранилище данных, которое формируется с помощью команды CREATE TABLE. Для её создания необходимо определить имя таблицы и список столбцов с указанием типов данных, ограничений и параметров хранения.
При выборе типов данных стоит учитывать объём и характер информации. Например, для числовых значений подходит NUMBER(10,2), для текстовых строк – VARCHAR2(255), а для даты и времени – DATE. Неправильный выбор типа данных приводит к потере производительности и увеличению объёма хранения.
Важно заранее планировать ограничения целостности: PRIMARY KEY гарантирует уникальность записей, NOT NULL предотвращает пустые значения, а FOREIGN KEY обеспечивает ссылочную целостность между таблицами. Эти ограничения создаются одновременно с таблицей или добавляются позднее через команду ALTER TABLE.
Для оптимизации доступа к данным рекомендуется создавать индексы на столбцах, которые чаще всего используются в фильтрах и соединениях. Oracle поддерживает как обычные индексы, так и уникальные, а также bitmap-индексы для больших объёмов данных.
Создание таблицы в Oracle также требует учёта пространства хранения: TABLESPACE определяет, где физически будут размещены данные. Разумное распределение по таблиспейсам улучшает производительность и упрощает управление базой данных.
Выбор схемы и базы данных для новой таблицы
В Oracle каждая таблица принадлежит конкретной схеме, которая соответствует пользователю базы данных. При создании таблицы важно определить, в какой схеме она будет храниться, так как это влияет на права доступа, управление объектами и производительность.
Чтобы выбрать схему, используйте команду CREATE TABLE schema_name.table_name. Если схема не указана, таблица создается в текущей схеме пользователя, выполняющего команду. Для проектов с разделением данных по отделам или приложениям рекомендуется создавать отдельные схемы для каждой логической группы таблиц.
При выборе базы данных учитывайте размер и нагрузку: крупные системы с высокими требованиями к параллельной обработке данных лучше размещать на отдельном экземпляре Oracle. В многопользовательской среде следует анализировать tablespace для оптимального распределения данных и индексов, предотвращая конкуренцию за ресурсы.
Для контроля использования пространства и производительности стоит заранее определить tablespace для таблицы: системные объекты обычно размещаются в USERS, временные данные – в TEMP, а большие объемы архивных данных – в специально созданных tablespace с высокой емкостью хранения.
Перед созданием таблицы убедитесь, что пользователь схемы имеет права CREATE TABLE и доступ к выбранным tablespace. Проверка прав выполняется через DBA_SYS_PRIVS и DBA_TAB_PRIVS. Это предотвращает ошибки при создании таблицы и последующие проблемы с доступом к данным.
Определение структуры таблицы: колонки, типы данных и ограничения
При создании таблицы в Oracle важно заранее определить колонки, их типы данных и ограничения. Каждая колонка должна иметь уникальное имя и подходящий тип данных: числовые (NUMBER, INTEGER), символьные (CHAR, VARCHAR2), даты и время (DATE, TIMESTAMP), булевы значения (CHAR с ограничением CHECK).
Тип данных определяет формат хранения и объем памяти. Например, NUMBER(10,2) хранит числа до 10 знаков с 2 десятичными. VARCHAR2(50) подходит для строк длиной до 50 символов. CHAR фиксирует длину и может занимать лишнее пространство при коротких значениях.
Ограничения обеспечивают целостность данных. PRIMARY KEY однозначно идентифицирует запись и автоматически создаёт индекс. UNIQUE гарантирует уникальность значения в колонке. NOT NULL запрещает пустые значения, CHECK проверяет соответствие условиям (например, CHECK (возраст > 0)). FOREIGN KEY устанавливает связь с другой таблицей, обеспечивая ссылочную целостность.
Для удобства чтения и поддержки таблицы рекомендуется группировать колонки логически, размещать первичные ключи в начале, а вспомогательные данные и даты – в конце. Следует использовать явное указание размеров для строк и чисел, избегая неопределённых типов, чтобы предотвратить ошибки при вставке данных.
Пример определения структуры таблицы:
CREATE TABLE сотрудники (
id NUMBER(6) PRIMARY KEY,
имя VARCHAR2(50) NOT NULL,
фамилия VARCHAR2(50) NOT NULL,
дата_рождения DATE CHECK (дата_рождения < SYSDATE),
отдел_id NUMBER(4) REFERENCES отделы(id),
зарплата NUMBER(8,2) CHECK (зарплата >= 0)
);
Такой подход обеспечивает точное хранение данных и снижает риск ошибок при последующих операциях с таблицей.
Создание таблицы с помощью команды CREATE TABLE

Команда CREATE TABLE используется для определения новой таблицы в Oracle SQL. Основной синтаксис включает имя таблицы и список столбцов с указанием типа данных и ограничений:
CREATE TABLE имя_таблицы (имя_столбца тип_данных [ограничения], …);
Типы данных выбираются исходя из содержания столбца. Для чисел применяются NUMBER(p,s), где p – общее количество цифр, s – количество знаков после запятой. Для текста используют VARCHAR2(n), где n – максимальная длина строки. Дата и время хранятся в DATE или TIMESTAMP.
Ограничения позволяют управлять целостностью данных. Часто применяются:
- PRIMARY KEY – уникальный идентификатор строки;
- UNIQUE – гарантирует уникальность значений столбца;
- NOT NULL – запрещает пустые значения;
- CHECK – проверка условий для столбца;
- FOREIGN KEY – ссылка на столбец другой таблицы.
Пример создания таблицы сотрудников:
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) CHECK (salary > 0),
department_id NUMBER(3) REFERENCES departments(department_id)
);
Рекомендации при создании таблицы:
- Имена столбцов и таблиц используйте короткие, но информативные;
- Старайтесь задавать NOT NULL для обязательных данных;
- Используйте CHECK для минимизации ошибок при вводе;
- Для внешних ключей проверяйте существование целевой таблицы;
- При больших числах выбирайте подходящую точность NUMBER(p,s), чтобы избежать потери данных.
Настройка первичного ключа и уникальных индексов

Первичный ключ обеспечивает уникальность каждой строки таблицы и создаёт индекс для ускорения поиска. В Oracle первичный ключ можно задать при создании таблицы или добавить позже.
Пример создания таблицы с первичным ключом:
CREATE TABLE employees (
employee_id NUMBER(6),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hire_date DATE,
CONSTRAINT pk_employees PRIMARY KEY (employee_id)
);
Добавление первичного ключа к существующей таблице:
ALTER TABLE employees
ADD CONSTRAINT pk_employees PRIMARY KEY (employee_id);
Уникальные индексы предотвращают дублирование значений в отдельных столбцах или комбинациях столбцов. Их создание полезно для полей, которые должны быть уникальными, но не являются первичным ключом.
Пример создания уникального индекса:
CREATE UNIQUE INDEX idx_unique_email
ON employees (email);
Добавление уникального ограничения через таблицу:
ALTER TABLE employees
ADD CONSTRAINT uq_email UNIQUE (email);
- Первичный ключ допускает только один на таблицу, уникальных индексов может быть несколько.
- Для составного ключа перечисляйте все столбцы через запятую:
PRIMARY KEY (col1, col2). - Уникальные индексы можно создавать как с дефолтным именем, так и явно указывать имя для удобства сопровождения.
- Для больших таблиц рекомендуется создавать индексы после загрузки данных для ускорения вставки.
- Удаление первичного ключа:
ALTER TABLE employees DROP CONSTRAINT pk_employees; - Удаление уникального индекса:
DROP INDEX idx_unique_email;
Добавление внешних ключей для связи с другими таблицами
Внешний ключ (FOREIGN KEY) используется для обеспечения ссылочной целостности между таблицами. Он указывает на поле или комбинацию полей в другой таблице, гарантируя, что значения совпадают с существующими записями родительской таблицы.
Для добавления внешнего ключа при создании таблицы используется синтаксис:
Пример:
CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
customer_id NUMBER,
order_date DATE,
CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
В данном примере поле customer_id в таблице orders ссылается на поле customer_id в таблице customers. Название ограничения fk_customer позволяет легко идентифицировать ключ при необходимости его изменения или удаления.
Если таблица уже создана, внешний ключ добавляется командой ALTER TABLE:
Пример:
ALTER TABLE orders
ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
При создании внешнего ключа можно определить поведение при удалении или обновлении родительской записи с помощью ON DELETE и ON UPDATE. Oracle поддерживает ON DELETE CASCADE, что позволяет автоматически удалять все связанные записи при удалении родительской строки:
ALTER TABLE orders
ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE;
Рекомендуется использовать имена ограничений, которые отражают связь между таблицами, и проверять существование данных перед добавлением внешнего ключа, чтобы избежать ошибок при применении ограничения.
Использование DEFAULT и NOT NULL для контроля данных
В Oracle SQL ограничения DEFAULT и NOT NULL позволяют управлять качеством и целостностью данных на уровне столбцов таблицы. Они обеспечивают автоматическую подстановку значений и предотвращают вставку пустых данных.
NOT NULL гарантирует, что столбец всегда содержит значение. Без этого ограничения возможна вставка NULL, что может нарушить логику работы приложений и отчетов.
- Синтаксис при создании таблицы:
CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50) NOT NULL, hire_date DATE NOT NULL );
- Рекомендация: применять NOT NULL для ключевых столбцов, таких как идентификаторы, даты и критические атрибуты.
DEFAULT задает значение по умолчанию для столбца, если при вставке записи значение не указано.
- Синтаксис:
CREATE TABLE orders ( order_id NUMBER PRIMARY KEY, status VARCHAR2(20) DEFAULT 'NEW', order_date DATE DEFAULT SYSDATE );
- Использование DEFAULT снижает риск ошибок при массовой загрузке данных и упрощает поддержку бизнес-логики.
Комбинирование DEFAULT и NOT NULL позволяет полностью контролировать вводимые данные:
- Пример:
CREATE TABLE products ( product_id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, stock NUMBER DEFAULT 0 NOT NULL );
- Здесь столбец
stockникогда не будет пустым и по умолчанию равен 0, что предотвращает некорректные вычисления остатков.
При изменении существующей таблицы ограничения добавляются через ALTER TABLE:
- Добавление DEFAULT:
ALTER TABLE employees MODIFY hire_date DEFAULT SYSDATE;
- Добавление NOT NULL:
ALTER TABLE employees MODIFY name NOT NULL;
Использование этих ограничений повышает надежность базы данных, минимизирует ошибки ввода и упрощает построение отчетов и аналитики.
Изменение структуры таблицы после создания через ALTER TABLE

В Oracle SQL для модификации структуры таблицы используется команда ALTER TABLE. Она позволяет добавлять, удалять или изменять столбцы без необходимости пересоздания таблицы.
Добавление нового столбца:
ALTER TABLE employees
ADD (middle_name VARCHAR2(50));
При добавлении столбца можно задавать тип данных и ограничения, например NOT NULL или DEFAULT:
ALTER TABLE employees
ADD (status CHAR(1) DEFAULT 'A' NOT NULL);
Удаление столбца:
ALTER TABLE employees
DROP COLUMN middle_name;
Удаление столбца невозможно, если на него есть внешние ключи; сначала необходимо удалить или изменить зависимые ограничения.
Изменение типа данных столбца:
ALTER TABLE employees
MODIFY (salary NUMBER(10,2));
Важно, чтобы новые параметры соответствовали текущим данным. Например, уменьшение размера VARCHAR может вызвать ошибку, если существующие значения превышают новый лимит.
Переименование столбца:
ALTER TABLE employees
RENAME COLUMN old_name TO new_name;
Изменение имени самой таблицы:
ALTER TABLE employees
RENAME TO staff;
Примеры одновременных изменений:
ALTER TABLE employees
ADD (hire_date DATE),
MODIFY (salary NUMBER(12,2));
Для проверки изменений после ALTER TABLE рекомендуется использовать DESCRIBE employees; или запрос к USER_TAB_COLUMNS:
| Столбец | Тип данных | Наличие NULL | Значение по умолчанию |
|---|---|---|---|
| employee_id | NUMBER(6) | NOT NULL | |
| first_name | VARCHAR2(20) | NULL | |
| salary | NUMBER(12,2) | NULL | |
| status | CHAR(1) | NOT NULL | ‘A’ |
Использование ALTER TABLE безопаснее для больших таблиц, чем пересоздание, так как изменения применяются без удаления данных. Рекомендуется тестировать все изменения на копии таблицы.
Проверка и тестирование созданной таблицы с помощью SELECT
После создания таблицы в Oracle важно убедиться, что структура соответствует ожиданиям и данные корректно добавляются. Для этого используется команда SELECT.
Для проверки структуры таблицы выполните запрос:
SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'ИМЯ_ТАБЛИЦЫ';
Этот запрос отобразит все столбцы, их типы данных и размеры, позволяя сверить с заявленной схемой.
Для тестирования вставленных данных используйте базовый SELECT:
SELECT * FROM ИМЯ_ТАБЛИЦЫ;
Если таблица содержит большое количество записей, добавьте ограничение:
SELECT * FROM ИМЯ_ТАБЛИЦЫ WHERE ROWNUM <= 10;
Это покажет первые 10 строк для быстрой проверки.
Для проверки отдельных столбцов и фильтрации по условиям:
SELECT столбец1, столбец2 FROM ИМЯ_ТАБЛИЦЫ WHERE столбец3 = 'Значение';
Так можно убедиться, что данные вставлены правильно и условия фильтрации работают.
Для проверки агрегатов и подсчетов используйте функции:
SELECT COUNT(*), MAX(столбец), MIN(столбец) FROM ИМЯ_ТАБЛИЦЫ;
Это позволяет проверить количество записей и диапазон значений без просмотра всех данных.
Если требуется проверить уникальность и отсутствие дубликатов в столбце с ограничением UNIQUE:
SELECT столбец, COUNT(*) FROM ИМЯ_ТАБЛИЦЫ GROUP BY столбец HAVING COUNT(*) > 1;
Результат покажет повторяющиеся значения, если они есть.
Для проверки связей с другими таблицами используйте JOIN:
SELECT a.*, b.* FROM ТАБЛИЦА_A a JOIN ТАБЛИЦА_B b ON a.id = b.id;
Это помогает убедиться, что внешние ключи и связи работают корректно.
Вопрос-ответ:
Какая базовая структура команды CREATE TABLE в Oracle?
Команда CREATE TABLE начинается с ключевого слова CREATE TABLE, за которым следует имя таблицы и список столбцов в скобках. Для каждого столбца указывается имя, тип данных и, при необходимости, ограничения (например, PRIMARY KEY, NOT NULL, UNIQUE). Пример: CREATE TABLE employees (id NUMBER PRIMARY KEY, name VARCHAR2(50), hire_date DATE);. После выполнения команды таблица появляется в схеме базы данных.
Как определить столбец с автоинкрементом в Oracle?
В Oracle для автоинкремента используют идентифицирующее свойство GENERATED AS IDENTITY. Например: id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY. Это создаёт столбец, значения которого автоматически увеличиваются при вставке новых строк. Раньше для этого использовались последовательности и триггеры, но современный способ проще и требует меньше кода.
Можно ли создать таблицу с внешним ключом сразу при создании?
Да, внешние ключи можно задать прямо в определении таблицы с помощью ключевого слова FOREIGN KEY. Например: CREATE TABLE orders (order_id NUMBER PRIMARY KEY, customer_id NUMBER, CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(id));. Это позволяет связать таблицы между собой, обеспечивая целостность данных.
Как ограничить значения в столбце конкретным списком?
Для ограничения значений используют CHECK-констрейнт. Например, если нужно, чтобы столбец status содержал только 'NEW', 'IN_PROGRESS' или 'DONE', пишут: status VARCHAR2(20) CHECK (status IN ('NEW','IN_PROGRESS','DONE')). При попытке вставить другое значение база данных выдаст ошибку.
Можно ли изменить структуру таблицы после её создания?
Да, для этого используется команда ALTER TABLE. С её помощью можно добавлять новые столбцы, изменять тип данных существующих, устанавливать или снимать ограничения. Пример: ALTER TABLE employees ADD email VARCHAR2(100);. Также можно удалить столбец или изменить его ограничения, но нужно учитывать существующие данные, чтобы не вызвать ошибки.
