Oracle создает таблицу из таблицы

Обновлено: 01.07.2024

Это руководство относится к Oracle, SQL Server, MySQL и PostgreSQL.

Содержание

Для чего используется команда "Создать таблицу"?

Команда SQL CREATE TABLE используется для создания таблицы базы данных.

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

Синтаксис создания таблицы SQL

Синтаксис оператора создания таблицы SQL:

имя_схемы

Это схема, по которой будет создана таблица. За ним должна следовать точка, а затем имя таблицы. Это необязательно.

имя_таблицы

Это имя таблицы, которую вы хотите создать.

Рекомендуется не включать пробелы в имя таблицы, чтобы упростить разработку. Я также рекомендую использовать имена таблиц в единственном числе (подробнее о единственном и множественном числе читайте здесь).

имя_столбца

Это имя каждого столбца, который может храниться в таблице базы данных. Также может быть до 30 символов.

тип_данных

Тип данных, к которому относится столбец. Многие типы данных требуют квадратных скобок после типа данных, чтобы указать количество символов или цифр. Полный список типов данных можно найти на веб-сайте Oracle.

NULL|НЕ NULL

Это используется, чтобы указать, могут ли значения столбца быть NULL или нет.

  • NULL означает, что для столбца может быть задано значение NULL. Если вы не укажете значение при вставке или укажете значение NULL, инструкция не вызовет ошибки и данные будут вставлены.
  • NOT NULL означает, что для столбца нельзя установить значение NULL. Если вы не укажете значение при вставке или укажете значение NULL, оператор вызовет ошибку.

inline_constraint

Здесь вы можете определить ограничение для этого столбца. Это то, что называется «встроенным ограничением», потому что вы определяете его в той же строке, что и столбец.

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

значение_по умолчанию

Если вы хотите, чтобы в этом столбце было значение по умолчанию, если оно не указано во время оператора INSERT, вы можете указать его здесь. Примером этого может служить столбец created_date — для него не нужно указывать значение при вставке, поэтому по умолчанию может быть SYSDATE.

out_of_line_constraints

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

Существует множество параметров, которые здесь не упоминаются, поскольку они не имеют отношения к большинству пользователей баз данных.

Полный синтаксис оператора CREATE TABLE можно найти в руководствах по базам данных:

Какой длины может быть имя таблицы в SQL?

Длина имени таблицы зависит от используемой базы данных:

  • Oracle (до версии 12.2): 30 символов.
  • Oracle (после версии 12.2): 128 символов.
  • SQL Server: 128 символов.
  • MySQL: 64 символа
  • PostgreSQL: 63 символа

Создать синтаксис первичного ключа таблицы

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

  1. Рядом с типом данных столбца, когда вы объявляете его в той же строке (встроенное ограничение)
  2. В конце всех объявлений столбцов (ограничение вне строки)

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

Чтобы объявить первичный ключ встроенным с помощью оператора CREATE TABLE:

Вот и все. Вы просто добавляете слова PRIMARY KEY после типа данных. Это отдельные слова — между ними нет подчеркивания или дефиса.

Нестандартный метод объявления первичного ключа в команде "Создать таблицу" немного отличается.

Вам нужно добавить его после всех определений ваших столбцов. Вам также нужно начать со слова ОГРАНИЧЕНИЕ.

Затем дайте первичному ключу имя. Вам нужно сделать это только для нестандартных ограничений. В этом примере я дал ему имя «pk_tbl1», чтобы указать, что это первичный ключ, а «tbl1» будет именем таблицы.

В скобках после слова PRIMARY KEY вы указываете имена столбцов. Если их несколько, разделите их запятой.

Создать синтаксис внешнего ключа таблицы

Как и в случае определения первичного ключа, внешний ключ можно объявить как встроенным, так и внестрочным в команде SQL Create Table.

Встроенные внешние ключи объявляются следующим образом:

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

Другой метод добавления внешнего ключа с помощью команды CREATE TABLE – внестрочный метод.

Вы должны начать со слова CONSTRAINT, а затем с имени внешнего ключа. Имя должно быть уникальным в базе данных, поэтому я предпочитаю начинать с термина «fk», а затем с двух таблиц, на которые я ссылаюсь.

Затем вы указываете слова FOREIGN KEY, а затем имя другой таблицы в скобках. Затем вы добавляете слово REFERENCES, затем в скобках указываете имя столбца из таблицы, на которую вы ссылаетесь (которая, вероятно, является первичным ключом).

Есть ли команда CREATE TABLE IF NOT EXISTS?

В некоторых базах данных есть CREATE TABLE IF NOT EXISTS, в других нет.

  • Oracle: нет, но есть обходной путь.
  • SQL Server: нет, но есть обходной путь.
  • MySQL: да, есть.
  • PostgreSQL: да

Обычно нет особого смысла проверять, существует таблица или нет, потому что объекты не должны создаваться во время выполнения, а приложение должно знать, какие объекты были созданы во время установки. Если это часть установки, вы должны знать, какие объекты существуют в любой момент процесса, поэтому вам не нужно проверять, существует ли уже таблица.

Oracle CREATE TABLE IF NOT EXISTS Эквивалент

Чтобы проверить, существует ли таблица перед ее созданием, вам потребуется написать блок PL/SQL. Проверить это можно несколькими способами:

  1. Вы можете попытаться создать таблицу и поймать появившуюся ошибку (ORA-00955: имя уже используется существующим объектом).
  2. Вы можете запросить представление USER_TABLES, чтобы найти счетчик, в котором имя таблицы совпадает, и проверить, равно ли значение > 0.
  3. Вы можете удалить таблицу, а затем создать ее снова.

Эквивалент SQL Server CREATE TABLE IF NOT EXISTS

Чтобы проверить, существует ли таблица перед ее созданием, вы можете включить оператор CREATE TABLE в оператор IF.

MySQL СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ

Чтобы создать таблицу, если она не существует в MySQL, просто добавьте IF NOT EXISTS в оператор CREATE TABLE:

PostgreSQL СОЗДАЕТ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ

В PostgreSQL 9.1 эта функция существует. Вы можете просто добавить IF NOT EXISTS в оператор CREATE TABLE:

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

СОЗДАТЬ ТАБЛИЦУ КАК ВЫБРАТЬ (CTAS)

SQL позволяет создавать таблицы на основе оператора SELECT.

Это очень полезная функция базы данных.

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

Синтаксис для использования этой команды:

Его также называют CTAS.

Вы указываете table_name для своей новой таблицы, а также запрос SELECT, на основе которого она будет основываться.

Если вы хотите, чтобы все записи были скопированы в новую таблицу, вы можете указать SELECT * FROM old_table.

Вы можете использовать предложение WHERE для ограничения копируемых значений.

Кроме того, вы можете создать таблицу как обычно, без AS SELECT, и использовать INSERT INTO SELECT для заполнения записей в таблице.

СОЗДАТЬ ТАБЛИЦУ КАК SELECT Без копирования данных

Вы также можете использовать команду CREATE TABLE AS SELECT, чтобы скопировать структуру таблицы без каких-либо данных.

Это проще, чем пытаться сгенерировать сценарий создания таблицы из существующей таблицы.

Для этого достаточно изменить предложение WHERE в запросе SELECT, чтобы гарантировать отсутствие возвращаемых строк.

Как вы это гарантируете?

Добавляя что-то, что явно оценивается как FALSE.

Распространенный пример: WHERE 1=0. Или ГДЕ 1=2. На самом деле все, что связано с двумя неравными числами, будет работать.

Итак, инструкция SELECT вернет имена столбцов и типы данных, но не данные. Когда таблица будет создана, в ней не будет данных.

Синтаксис для этого будет следующим:

Ошибки и исключения Oracle CREATE TABLE

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

Исключение: ORA-00955: имя уже используется существующим объектом

Причина: вы пытаетесь создать таблицу с именем, которое уже используется.

Решение. Используйте другое имя для таблицы или удалите таблицу с существующим именем. Или используйте другую схему для своей таблицы, если это применимо.

Исключение: ORA-02260: таблица может иметь только один первичный ключ

Причина: вы пытаетесь добавить первичный ключ в таблицу, в которой он уже есть.

Решение. Просмотрите инструкцию SQL CREATE TABLE и удалите все определения PRIMARY KEY, кроме одного.

Исключение: ORA-02267: тип столбца несовместим с указанным типом столбца

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

Решение. Убедитесь, что типы данных одинаковы для обоих столбцов. И убедитесь, что вы не ссылаетесь на ту же таблицу для внешнего ключа (это должна быть другая таблица).

Исключение: ORA-00904: неверный идентификатор

Причина: существует множество причин этой ошибки, но обычно это синтаксическая ошибка.

Решение. Убедитесь, что все запятые и скобки в вашем утверждении расставлены в правильных местах.

Исключение: ORA-00957: повторяющееся имя столбца

Причина: у вас есть два столбца с одинаковыми именами.

Решение. Переименуйте один из столбцов, чтобы он не дублировался. Также убедитесь, что все запятые и скобки стоят на своих местах.

СОЗДАНИЕ ТАБЛИЦ Примеры

Хорошо, теперь пришло время взглянуть на несколько примеров создания таблицы.

Эти примеры CREATE TABLE охватывают все темы, упомянутые в этой статье. Обычно полезно увидеть примеры с данными и реальными именами, а не синтаксисом.

В каждом из примеров демонстрируется SQL с использованием синтаксиса для Oracle, SQL Server, MySQL и PostgreSQL.

Пример 1. Базовая таблица

В этом примере используется инструкция CREATE TABLE, которая создает простую таблицу с парой столбцов.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 2 — Большая таблица

Этот пример CREATE TABLE включает много разных столбцов и типов данных.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 3. Большая таблица с NOT NULL и DEFAULT

Этот пример CREATE TABLE похож на пример 2, но включает несколько ограничений NOT NULL и некоторые значения по умолчанию.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Примечание. До версии MySQL 8.0.13 использование функции или выражения (например, CURRENT_DATE) в качестве значения столбца по умолчанию не поддерживалось. Из документации MySQL:

За одним исключением, значение по умолчанию, указанное в предложении DEFAULT, должно быть буквальной константой; это не может быть функция или выражение. Это означает, например, что вы не можете установить по умолчанию для столбца даты значение функции, такой как NOW() или CURRENT_DATE. Исключением является то, что для столбцов TIMESTAMP и DATETIME вы можете указать CURRENT_TIMESTAMP по умолчанию.

Начиная с версии 8.0.13 это работает. Вы можете установить CURRENT_DATE по умолчанию для столбца дат.

Пример 4. Встроенный первичный ключ

В этом примере инструкции CREATE TABLE используется первичный ключ, определенный в строке.

Синтаксис одинаков для всех баз данных, различаются только типы данных столбцов.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 5. Встроенный первичный и внешний ключ

В этом примере CREATE TABLE используется встроенный первичный ключ и встроенный внешний ключ.

Синтаксис одинаков для всех баз данных, различаются только типы данных столбцов.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 6. Неправильный первичный и внешний ключ

В этом примере Oracle CREATE TABLE первичный и внешний ключ объявляются вне строки (в конце объявлений столбцов).

Синтаксис одинаков для всех баз данных, различаются только типы данных столбцов.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 7. Дополнительные ограничения

В этом примере CREATE TABLE используется для объявления таблицы с первичным ключом, внешним ключом, ограничением уникальности и ограничением проверки.

База данных SQL
Oracle
SQL Server
MySQL
PostgreSQL

Пример 8. Создание таблицы как выбор со всеми столбцами

В этом примере используется Create Table as Select для создания таблицы из другой таблицы с использованием всех столбцов.

Синтаксис одинаков для Oracle, SQL Server, MySQL и PostgreSQL.

Пример 9. Создание таблицы как выборки с несколькими столбцами

В этом примере используется Create Table as Select для создания таблицы из другой таблицы с использованием только некоторых столбцов.

Синтаксис одинаков для Oracle, SQL Server, MySQL и PostgreSQL.

Пример 10. Создание таблицы как выборки без данных

В этом примере используется Create Table as Select для создания таблицы из другой таблицы, но данные в новую таблицу не добавляются.

Синтаксис одинаков для Oracle, SQL Server, MySQL и PostgreSQL.

Сводка различий между поставщиками

В этой таблице представлены сводные данные о различиях в операторе CREATE TABLE между различными базами данных.

Критерии Oracle SQL Server MySQL PostgreSQL< /td>
Максимальная длина имени таблицы 128 128 64 63< /td>
Создать таблицу, если она не существует? Нет, но есть обходной путь Нет, но есть обходной путь Да Да
Дата действия по умолчанию Да Да Да, начиная с 8.0.13 Да

Заключение

Итак, вот вам руководство по оператору SQL CREATE TABLE. Если у вас есть какие-либо вопросы по какой-либо части оператора CREATE TABLE, дайте мне знать в комментариях ниже.

Наконец, если вам понравилась информация и советы по карьере, которые я предоставляю, подпишитесь на мою рассылку ниже, чтобы быть в курсе моих статей. Вы также получите фантастический бонус. Спасибо!

В этом руководстве по Oracle объясняется, как использовать оператор Oracle CREATE TABLE AS с синтаксисом и примерами.

Описание

Вы также можете использовать оператор Oracle CREATE TABLE AS для создания таблицы из существующей таблицы путем копирования столбцов существующей таблицы.

Важно отметить, что при создании таблицы таким образом новая таблица будет заполнена записями из существующей таблицы (на основе оператора SELECT).

Создать таблицу — путем копирования всех столбцов из другой таблицы

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего все столбцы в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования всех столбцов из другой таблицы.

В этом примере создается новая таблица с именем suppliers, которая включает все столбцы из таблицы companies.

Если в таблице companies есть записи, новая таблица suppliers будет заполнена записями, возвращенными оператором SELECT.

Создать таблицу — путем копирования выбранных столбцов из другой таблицы

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего выбранные столбцы в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования выбранных столбцов из другой таблицы.

В этом примере будет создана новая таблица с именем suppliers, но новая таблица будет включать только указанные столбцы (например, company_id, адрес, город, штат и почтовый индекс) из компаний. таблица.

Опять же, если в таблице companies есть записи, новая таблица suppliers будет заполнена записями, возвращенными оператором SELECT.

Создать таблицу — путем копирования выбранных столбцов из нескольких таблиц

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего столбцы из нескольких таблиц в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования выбранных столбцов из нескольких таблиц.

В этом примере создается новая таблица с именем suppliers на основе определений столбцов из обеих таблиц companies и categories (например: company_id, адрес и категория_тип).

Часто задаваемые вопросы

Вопрос. Как создать таблицу Oracle из другой таблицы, не копируя значения из старой таблицы?

Ответ: Для этого используется синтаксис Oracle CREATE TABLE:

Это создаст новую таблицу с именем suppliers, которая будет включать все определения столбцов из таблицы companies, но не данные из таблицы companies.

Благодарности. Мы хотели бы поблагодарить Daniel W. за предоставление этого решения!

Вывод: в этом руководстве вы узнаете, как использовать оператор Oracle CREATE TABLE для создания новой таблицы в базе данных Oracle.

Введение в оператор Oracle CREATE TABLE

Чтобы создать новую таблицу в базе данных Oracle, используйте оператор CREATE TABLE.Ниже показан основной синтаксис инструкции CREATE TABLE:

  • Сначала укажите имя таблицы и имя схемы, к которой принадлежит новая таблица, в предложении CREATE TABLE.
  • Во-вторых, перечислите все столбцы таблицы в скобках. Если в таблице несколько столбцов, их необходимо разделить запятыми (,). Определение столбца включает имя столбца, за которым следует его тип данных, например NUMBER , VARCHAR2 , и ограничение столбца, такое как NOT NULL , первичный ключ, проверка.
  • В-третьих, добавьте ограничения таблицы, если применимо, например первичный ключ, внешний ключ, проверка.

Обратите внимание, что у вас должна быть системная привилегия CREATE TABLE для создания новой таблицы в вашей схеме и системная привилегия CREATE ANY TABLE для создания новой таблицы в схеме другого пользователя. Кроме того, владелец новой таблицы должен иметь квоту на табличное пространство, содержащее новую таблицу, или системную привилегию UNLIMITED TABLESPACE.

Пример инструкции Oracle CREATE TABLE

В следующем примере показано, как создать новую таблицу с именем person в схеме ot:

В этом примере таблица person содержит три столбца: person_id , first_name и last_name .

Person_id — это столбец идентификаторов, определяющий уникальные строки в таблице. Тип данных столбца person_id — NUMBER. Предложение GENERATED BY DEFAULT AS IDENTITY указывает Oracle генерировать новое целое число для столбца всякий раз, когда в таблицу вставляется новая строка.

Столбец first_name имеет тип данных VARCHAR2 с максимальной длиной 50. Это означает, что вы не можете вставить имя, длина которого больше 50, в столбец first_name. Кроме того, ограничение столбца NOT NULL не позволяет столбцу first_name иметь значения NULL.

Столбец last_name имеет те же характеристики, что и столбец first_name.

Предложение PRIMARY KEY указывает столбец person_id в качестве столбца первичного ключа, который используется для идентификации уникальной строки в таблице person.

В этом руководстве вы узнали, как использовать оператор Oracle CREATE TABLE для создания новой таблицы.

CREATE TABLE
Для создания новой таблицы в базе данных Oracle предоставляет оператор Oracle CREATE TABLE.

Синтаксис:

Параметры:

имя_схемы: используется для указания имени схемы, к которой принадлежит новая таблица.
имя_таблицы: используется для указания имени таблицы.
Определение столбца: Столбец1, столбец2, … столбец n используется для указания имени нескольких столбцов, которые вы хотите добавить в таблицу. База данных Oracle не позволяет общее количество столбцов более 32. Тип данных является обязательным для каждого столбца. Тип данных столбца может быть NUMBER, VARCHAR2 и т. д. Ограничение столбца в основном определяет каждый столбец как «NULL» или «NOT NULL» со значением «NULL» по умолчанию. Некоторыми другими распространенными ограничениями столбца являются первичный ключ, проверка и внешний ключ.

Пример 1. Создание таблицы с ограничением таблицы NULL и NOT NULL.

СОЗДАТЬ ТАБЛИЦУ студентов (идентификационный номер (10) НЕ NULL, имя varchar2 (40) НЕ NULL, класс varchar2 (10));

Объяснение:
Столбец_1:
id: это имя первого столбца.
число: это тип данных первого столбца, который также указывает максимальную длину 10 цифр для «идентификатора».
NOT NULL: определяет ограничение столбца первого столбца, поэтому столбец 1 не может содержать нулевые значения.
Столбец_2:
имя: это имя второго столбца.
varchar: это тип данных второго столбца, который также указывает максимальную длину имени в 40 символов.
NOT NULL: определяет ограничение столбца второго столбца, поэтому столбец 2 не может содержать нулевые значения.
Столбец_3:
класс: это имя третьего столбца.
varchar: это тип данных третьего столбца, который также указывает максимальную длину 10 символов для «класса».
NULL: для третьего столбца не определено ограничение столбца, поэтому по умолчанию он равен NULL, поэтому столбец 3 может содержать нулевые значения.

Пример 2. Создание таблицы с ограничением таблицы PRIMARY KEY.

СОЗДАТЬ ТАБЛИЦУ студентов ( id number(10) NOT NULL, name varchar2(40) NOT NULL, class varchar2(10) PRIMARY KEY(id) );

Объяснение:
Все три столбца и их определения такие же, как в примере 1. Разница заключается в наличии первичного ключа во втором примере.
Предложение PRIMARY KEY — это поле или комбинация полей, определяющая столбец в качестве столбца первичного ключа. Столбец первичного ключа используется для выделения уникальной строки в таблице. В Oracle таблица может содержать только один первичный ключ, и каждое поле первичного ключа должно содержать значения NOT NULL. В приведенном выше примере «id» определяется как столбец первичного ключа.

Читайте также: