Как переименовать таблицу в oracle

Обновлено: 04.07.2024

Команда ALTER TABLE используется для осуществления изменений таблицы:

  • Добавление колонок
  • Удаление колонок
  • Модификация колонок
  • Изменения имени таблицы
  • Изменения кодировки таблицы
  • Добавление и удаление ограничений

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

Чтобы просмотреть изменения колонок в таблице, воспользуйтесь командой:
SHOW COLUMNS FROM table_name;

Перед началом работ выберем базу данных, с которой будем работать.

Как добавить колонку к таблице MySQL?

Синтаксис добавления колонки в таблицу:

ALTER TABLE table_name ADD column_name data_type attributes;

Для примера добавим к таблице books колонку с именем discount, в которой будет хранится процент скидки на книги и amount для хранения количества книг.

Можно добавлять, удалять и модифицировать сразу несколько колонок за раз.

ALTER TABLE books ADD discount TINYINT UNSIGNED , ADD amount SMALLINT UNSIGNED ;

Каждая новая колонка добавляется в конец таблицы. Если вы хотите добавить новую колонку после определенной колонки, то используйте команду AFTER .

Добавим колонку shelf_position сразу после колонки price.

ALTER TABLE books ADD shelf_position VARCHAR (20) AFTER Price;

Как удалить колонку из таблицы MySQL?

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

Если в таблице осталась только одна колонка, то ее удалить нельзя.

Удалим колонку edition с номером издания книги.

Как переставить колонки в таблице MySQL?

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

ALTER TABLE table_name MODIFY COLUMN column_name data_type AFTER column_after_name;

Переместим колонку с ценой Price на место после колонки Author:

ALTER TABLE books MODIFY COLUMN Price DECIMAL (15,2) AFTER Author;

Как изменить имя и тип данных у колонки в таблице MySQL?

Синтаксис смены имени и типа данных у колонки:

ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name new_data_type;

Сменим имя у колонки сreation_date на entry_date и тип данных c TIMESTAMP на DATE .

ALTER TABLE books CHANGE COLUMN creation_date entry_date DATE ;

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

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

Как изменить значение по умолчанию в колонке таблицы MySQL?

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

Синтаксис установки значения по умолчанию для колонки:

ALTER TABLE table_name ALTER column_name SET DEFAULT value ;

Установим для колонки discount значение по умолчанию:

Чтобы удалить значение по умолчанию, используйте синтаксис:

ALTER TABLE table_name ALTER column_name DROP DEFAULT ;

Удалим созданное значение по умолчанию для колонки discount:

Как изменить имя таблицы MySQL?

Синтаксис переименования таблицы:

Изменим имя таблицы books на books_collection;

Как изменить метаданные о таблице в MySQL?

С помощью команды ALTER можно также изменить некоторые метаданные о таблице.

Для начала давайте их выведем.

Вывод для таблицы books будет выглядеть следующим образом.

mysql> SHOW TABLE STATUS LIKE 'books'\G;
*************************** 1. row ***************************
Name: books
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 24
Avg_row_length: 682
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 5242880
Auto_increment: 25
Create_time: 2019-01-18 20:00:32
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

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

Как я могу быть уверен, что ничего не сломал?

Обратите внимание, что я хочу сохранить все существующие данные, содержащиеся в таблице.

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

Все существующие индексы, ограничения и триггеры для переименовываемой таблицы будут автоматически ссылаться на новое имя. Однако любые соглашения об именовании, используемые для этих объектов, не будут автоматически использовать обновленное имя. Например, если первичный ключ для TABLE_NAME обычно называется TABLE_NAME_PK , переименование TABLE_NAME в NEW_TABLE_NAME не будет автоматически переименуйте ограничение первичного ключа в NEW_TABLE_NAME_PK . Необходимо проверить код-пакеты, процедуры и функции, которые ссылаются на старое имя таблицы, а также любые триггеры, которые ссылаются на старое имя таблицы. Аналогично, представления против старого имени таблицы также будут ломаться. Представление ALL_DEPENDENCIES может помочь определить, какие из этих объектов нуждаются в обновлении.

Если вы

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

Теперь, хотя ограничения и триггеры будут продолжать работать правильно, они сохранят свои первоначальные имена. Если у вас есть соглашения об именовании для этих объектов, которые вы хотите сохранить после имени таблицы, вам нужно будет сделать больше. Например, если вы хотите, чтобы триггер уровня строки перед вставкой в таблицу FOO был назван TRG_BI_FOO , и вы переименуете таблицу в BAR , вам нужно будет явно изменить триггер, чтобы изменить его имени

Аналогично, вам нужно переименовать ограничения и индексы

Сохранит зависимости и данные таблицы, но всегда может быть фрагмент PL / SQL, который ссылается на старое имя, которое станет недействительным.

Оператор ALTER TABLE позволяет изменять структуру существующей таблицы. Например, вы можете добавлять или удалять колонки, изменять тип существующих колонок, переименовывать колонки, или саму таблицу. Также можно изменить комментарий к таблице и тип таблицы.

Синтаксис оператора ALTER TABLE во многих случаях подобен синтаксису CREATE TABLE . Для получения подробной информации см. раздел 11.1.5, "CREATE TABLE Syntax".

Некоторые операции могут вызвать предупреждения, если совершать их над таблицей, механизм хранения которой не поддерживает такие операции. Эти предупреждения можно просмотреть с помощью оператора SHOW WARNINGS . См. раздел 11.5.4.28, "SHOW WARNINGS Syntax"

Если вы используете оператор ALTER TABLE для изменения колонки, но оператор DESCRIBE tbl_name показывает, что ваша колонка осталась неизменной, то возможно, что сервер MySQL проигнорировал ваши изменения по одной из причин, описанных в разделе 11.1.5.1, "Silent Column Specification Changes"

В большинстве случаев оператор ALTER TABLE работает, создавая временную копию исходной таблицы. Изменения осуществляются на копии, затем исходная таблица удаляется и новая переименовывается. Пока оператор ALTER TABLE выполняется, исходная таблица остается доступной для чтения другим клиентам. Обновление и запись данных в таблицу задерживаются до тех пор пока новая таблица не будет готова, и затем автоматически направляются к новой таблице без каких-либо уведомлений о неудавшихся изменениях. Временная таблица создается в директории базы данных новой таблицы. Она может отличаться от директории базы данных исходной таблицы, если оператор ALTER TABLE с помощью переименования таблицы переносит её в другую базу данных.

Если вы используете оператор ALTER TABLE tbl_name RENAME TO new_tbl_name без каких-либо других опций, MySQL просто переименует файлы, относящиеся к таблице tbl_name . (Для переименования таблиц вы также можете использовать оператор RENAME TABLE . См. раздел 11.1.9, "RENAME TABLE Syntax".) Права доступа пользователей, относящиеся именно к переименованной таблице, не перенесутся на новое имя. Они должны быть изменены вручную с помощью операторов GRANT и REVOKE .

Если вы используете оператор ALTER TABLE с любыми отличными от RENAME опциями, MySQL всегда создает временную таблицу даже если данные заведомо не требуется копировать (например, когда меняется название колонки). Для таблиц типа MyISAM вы можете ускорить пересоздание индексов (это самая медленная часть в процессе изменения) установкой для системной переменной myisam_sort_buffer_size большей величины.

Информацию о возможных проблемах при использовании оператора ALTER TABLE см. в разделе B.1.7.1. "Problems with ALTER TABLE".

  • Для выполнения оператора ALTER TABLE необходимо иметь привелегии ALTER , INSERT и CREATE на изменяемую таблицу.
  • Ключевое слово IGNORE - это расширение MySQL к стандарту SQL. Оно определяет как будет работать оператор ALTER TABLE , если в результате изменения таблицы произойдет дублирование уникального ключа или возникнет предупреджение при работе в SQL-режиме strict. Если ключевое слово IGNORE не указано, то при возникновении ошибки копирование прерывается и откатывается назад. Если указано ключевое слово IGNORE , то используется только первая строка среди строк с дублирующимся уникальным ключом, остальные конфликтующие строки удаляются. Некорректные значения приводятся к ближайшему допустимому значению.
  • table_option обозначает опции таблицы, которые могут быть использованы в операторе CREATE TABLE , такие как ENGINE , AUTO_INCREMENT или AVG_ROW_LENGTH . (В разделе 12.1.10, "CREATE TABLE Syntax" перечисленны все табличные опции). Однако, оператор ALTER TABLE игнорирует опции DATA DIRECTORY и INDEX DIRECTORY .
    Например, для преобразования механизма хранения таблицы к InnoDB используется следующее выражение:

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

В базе данных Oracle пользователи могут создавать различные типы таблиц в соответствии со своими потребностями. Обычно используются следующие типы таблиц:

Типы Описание
Таблица кучи Данные организованы в виде кучи и хранятся в отдельном поле таблицы несвязанным образом. Это также стандартная таблица. Обычно мы используем таблицы кучи.
диаграмма направления Данные хранятся в сегменте индекса, соответствующем ограничению первичного ключа в структуре B-дерева.
Таблица кластеров Кластер состоит из набора таблиц, которые используют одну и ту же базу данных. В некоторых случаях использование кластерных таблиц может сэкономить место для хранения.
Таблица разделов Данные разделены на более мелкие части и хранятся в соответствующих разделах. Каждый раздел может управляться и использоваться независимо.

1.1 Тип данных

n = от 1 до 2000 байт

Символьная строка фиксированной длины, n байтов, если длина не указана, по умолчанию - 1 байт (китайский символ - 2 байта)

n = от 1 до 4000 байт

Строка символов переменной длины, укажите максимальную длину n в конкретном определении,
Этот тип данных может помещать все символы в числа, буквы и наборы символов ASCII (или стандарты набора символов, принятые системами баз данных, такими как EBCDIC).
Если длина данных не достигает максимального значения n, Oracle 8i автоматически корректирует длину поля в соответствии с размером данных,
Если до и после ваших данных есть пробелы, Oracle 8i автоматически удалит их. VARCHAR2 - наиболее часто используемый тип данных.
Максимальная длина индекса может быть 3209.

m=1 to 38
n=-84 to 127

Числовой столбец переменной длины, допускающий 0, положительные и отрицательные значения, m - количество значащих цифр, а n - количество цифр после десятичной точки.
Например: число (5,2), максимальное значение этого поля - 99 999, если значение превышает лимит цифр, лишние цифры будут усечены.
Например: число (5,2), но введите 575,316 в это поле в строке данных, тогда фактически сохраненное значение в поле будет 575,32.
Например: число (3,0), введите 575,316, фактически сохраненные данные - 575.

Все юридические даты с 1 января 4712 г. до н.э. по 31 декабря 4712 г.

Символьные столбцы переменной длины с максимальной длиной 2 ГБ используются для длинных строк данных, в которых не нужно искать строки. Если вы хотите искать символы, используйте тип varchar2.

Для двоичных данных переменной длины при определении поля должна быть указана максимальная длина n. Oracle 8i использует этот формат для сохранения небольших графических файлов или отформатированных текстовых файлов, таких как документы Miceosoft Word.
Raw - это более старый тип данных, который в будущем будет постепенно заменяться типами данных больших объектов, такими как BLOB, CLOB и NCLOB.

Двоичные данные переменной длины, максимальная длина - 2 ГБ. Oracle 8i использует этот формат для сохранения больших графических файлов или форматированных текстовых файлов, таких как документы Miceosoft Word, и нетекстовых файлов, таких как аудио и видео.
В одной таблице не может быть одновременно длинного типа и длинного необработанного типа.Длинное необработанное также является более старым типом данных и в будущем будет постепенно заменяться типами данных больших объектов, такими как BLOB, CLOB и NCLOB.

Три типа больших объектов (LOB) используются для сохранения больших графических файлов или форматированных текстовых файлов, таких как документы Miceosoft Word, и нетекстовых файлов, таких как аудио и видео. Максимальная длина составляет 4 ГБ.
Существует несколько типов LOB, в зависимости от типа используемых байтов Oracle 8i фактически хранит эти данные внутри базы данных.
Могут выполняться специальные операции, такие как чтение, сохранение и запись.

Максимальная длина большого двоичного объектного файла, хранящегося вне базы данных, составляет 4 ГБ.
Этот тип внешних больших объектов записывает изменения в базе данных, но конкретное хранение данных осуществляется вне базы данных.
Oracle 8i может читать и запрашивать BFILE, но не может писать.
Размер определяется операционной системой.

Я также поместил это в документ, который можно скачать в конце статьи!

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

Create table [schema,] table_name(

column_name data_type [default express] [constraint]

[,column_name data_type [default express] [constraint]]

[,column_name data_type [default express] [constraint]]

);

Некоторые из приведенных выше объяснений необходимо понять, [] означает, что это необязательно при создании таблицы. А отсутствие [] означает, что он должен быть записан при создании. !

Например, [ограничение] добавляет ограничения к текущему столбцу, тогда ограничения можно добавлять или не добавлять!

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

table_name:Как следует из названия, это имя таблицы.

column_name:Название столбца

data_type: Тип данных, как написано в 1.1.

default express:По умолчанию.

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


Нулевое значение означает непустое значение, то есть это поле не может быть пустым.

1.3 Просмотр информации таблицы

После того, как мы создадим таблицу, мы можем просмотреть структуру таблицы с помощью описания (для краткости desc). следующим образом:


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

Конечно, мы также можем запросить релевантную информацию о таблице, запросив словарь данных, чтобы попробовать user_tables!


Это просто указывает на то, что эта таблица существует. Что делать, если вы хотите просмотреть структуру таблицы, как и desc? Затем вы можете использовать словарь данных user_tab_columns следующим образом:


1.4 Укажите режим таблицы

В приведенном выше синтаксисе для создания таблицы есть поле схемы!

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


1.4 Укажите журнал повторов

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


Затем мы проверяем user_tables в словаре данных, чтобы убедиться, что это так, как показано ниже:


Конечно, вы также можете использовать логгирование, что означает, что логирование не требуется!

1.5 Укажите кеш

Если пользователь запросил данные, которые использовались только недавно, то эти данные, скорее всего, будут сохранены в буфере. Некоторые люди могут спросить, каковы преимущества буферизации? Фактически, выгода значительно увеличивается. Потому что в случае с буферизацией, если вы хотите прочитать данные в следующий раз, вам не нужно читать их с диска.Разве не удобно брать их прямо из буфера?

При создании таблицы вы можете использовать ключ кеширования, чтобы изменить этот результат. О, кстати, Oracle использует LRU (Least Recently Userd) для управления буферизацией. Если кэш добавлен в конец таблицы, Oracle не будет выгружать данные, связанные с этой таблицей, при выполнении LRU. Как показано:


После создания таблицы вам, конечно же, необходимо вести ее обслуживание!

2.1 Добавление и удаление столбцов

изменить имя таблицы таблицы добавить имя столбца тип данных


изменить имя таблицы таблицы имя столбца drop column name

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

изменить имя столбца таблицы имени таблицы (имя столбца 1, имя столбца 2 . )

Например: изменить таблицу mybook3 drop column publicdata; просто удалите столбец прямо сейчас.

2.2 Использовать неиспользованные

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

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

изменить неиспользуемое имя таблицы таблицы (имя столбца);


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

Конечно, вы также можете удалить эту отметку, синтаксис следующий:

изменить имя таблицы таблицы удалить неиспользуемое имя столбца

2.2 Обновить столбец

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

① Изменить имя столбца

Синтаксис для обновления столбцов:

изменить имя таблицы таблицы переименовать столбец из старого имени столбца в новое имя столбца


② Измените тип данных столбца

Когда мы изменяем тип данных, я хочу обратить внимание на 2 момента:

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

Но вы можете это сделать, но вы должны знать последствия.

☆ Если в таблице нет данных, их можно изменить в обратном порядке.

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


То же самое касается изменения точности столбца!

③ Измените значение столбца по умолчанию

изменить имя таблицы изменить имя таблицы (значение по умолчанию для имени столбца)

2.3 Переименовать таблицу

изменить имя таблицы переименовать в новую таблицу


Это очень просто.

ПРИМЕЧАНИЕ. Переименовать таблицу легко, но не рекомендуется. Потому что последствия этого очень велики. Хотя Oracle может автоматически обновлять внешние ключи, ограничения и связи таблиц в словаре данных, он не может обновлять сохраненные коды в базе данных. Поэтому использовать его нужно с осторожностью.

2.4 Удалить определение таблицы

Если пользователю необходимо удалить определение созданной таблицы, можно использовать следующий синтаксис:

удалить имя таблицы таблицы [каскадные ограничения | очистка]

Что нам нужно знать, так это разницу между удалением определений таблиц и удалением данных таблицы.

Удалите определение таблицы, структура и данные удаленной таблицы не существуют.

Удалите данные таблицы, просто удалите данные, но структура останется.

При использовании оператора drop table вы можете использовать следующие два параметра:

★cascade constraints

Я создал 2 таблицы:

Таблица классов: myclass


Стол для студентов:


Хорошо, после того, как у нас есть вышеуказанная среда, мы случайным образом вставляем некоторые данные в две таблицы. Затем я удаляю таблицу myclass, результат будет следующим:


Теперь мы добавляем каскадные ограничения, и результат будет следующим:


★purge

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

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