Главная » Информационные системы » Управление данными » 19. ОСНОВНЫЕ КОМАНДЫ ЯЗЫКА SQL СОЗДАНИЯ И ИЗМЕНЕНИЯ СТРУКТУРЫ ОБЪЕКТОВ БАЗЫ ДАННЫХ (CREATE TABLE, ALTER TABLE, DROP TABLE)

19. ОСНОВНЫЕ КОМАНДЫ ЯЗЫКА SQL СОЗДАНИЯ И ИЗМЕНЕНИЯ СТРУКТУРЫ ОБЪЕКТОВ БАЗЫ ДАННЫХ (CREATE TABLE, ALTER TABLE, DROP TABLE)

CREATE
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]
или
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
или PRIMARY KEY (index_col_name,...)
или KEY [index_name] (index_col_name,...)
или INDEX [index_name] (index_col_name,...)
или UNIQUE [INDEX] [index_name] (index_col_name,...)
или FULLTEXT [INDEX] [index_name] (index_col_name,...)
или [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
или CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
или SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
или MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
или INT[(length)] [UNSIGNED] [ZEROFILL]
или INTEGER[(length)] [UNSIGNED] [ZEROFILL]
или BIGINT[(length)] [UNSIGNED] [ZEROFILL]
или REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
или DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
или FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
или DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
или NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
или CHAR(length) [BINARY]
или VARCHAR(length) [BINARY]
или DATE
или TIME
или TIMESTAMP
или DATETIME
или TINYBLOB
или BLOB
или MEDIUMBLOB
или LONGBLOB
или TINYTEXT
или TEXT
или MEDIUMTEXT
или LONGTEXT
или ENUM(value1,value2,value3,...)
или SET(value1,value2,value3,...)
index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
или AUTO_INCREMENT = #
или AVG_ROW_LENGTH = #
или CHECKSUM = {0 | 1}
или COMMENT = string
или MAX_ROWS = #
или MIN_ROWS = #
или PACK_KEYS = {0 | 1 | DEFAULT}
или PASSWORD = string
или DELAY_KEY_WRITE = {0 | 1}
или ROW_FORMAT= { default | dynamic | fixed | compressed }
или RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#
или UNION = (table_name,[table_name...])
или INSERT_METHOD= {NO | FIRST | LAST }
или DATA DIRECTORY=абсолютный путь к каталогу
или INDEX DIRECTORY=абсолютный путь к каталогу
select_statement:
[IGNORE | REPLACE] SELECT ... (любое корректное выражение SELECT)

Оператор CREATE TABLE создает таблицу с заданным именем в текущей базе данных. Правила для допустимых имен таблицы приведены в разделе Раздел 6.1.2, «Имена баз данных, таблиц, столбцов, индексы псевдонимы». Если нет активной текущей базы данных или указанная таблица уже существует, то возникает ошибка выполнения команды.

В версии MySQL 3.22 и более поздних имя таблицы может быть указано как db_name.tbl_name. Эта форма записи работает независимо от того, является ли указанная база данных текущей.

Начиная с MySQL 3.23 при создании таблицы можно использовать ключевое слово TEMPORARY. Временная таблица автоматически удаляется по завершении соединения, а ее имя действительно только в течение данного соединения. Это означает, что в двух разных соединениях могут использоваться временные таблицы с одинаковыми именами без конфликта друг с другом или с существующей таблицей с тем же именем (существующая таблица скрыта, пока не удалена временная таблица). С версии MySQL 4.0.2 для создания временных таблиц необходимо иметь привилегии CREATE TEMPORARY TABLES.

В версии MySQL 3.23 и более поздних можно использовать ключевые слова IF NOT EXISTS для того, чтобы не возникала ошибка, если указанная таблица уже существует. Следует учитывать, что при этом не проверяется идентичность структур этих таблиц.

В MySQL 4.1 вы можете указать LIKE чтобы создавать таблицу, основываясь на определении другой, уже существующей, таблицы. В MySQL 4.1 также можете определять тип автоматически создаваемого столбца:

CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
ALTER
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
или ADD [COLUMN] (create_definition, create_definition,...)
или ADD INDEX [index_name] (index_col_name,...)
или ADD PRIMARY KEY (index_col_name,...)
или ADD UNIQUE [index_name] (index_col_name,...)
или ADD FULLTEXT [index_name] (index_col_name,...)
или ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
[reference_definition]
или ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
или CHANGE [COLUMN] old_col_name create_definition
[FIRST | AFTER column_name]
или MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
или DROP [COLUMN] col_name
или DROP PRIMARY KEY
или DROP INDEX index_name
или DISABLE KEYS
или ENABLE KEYS
или RENAME [TO] new_tbl_name
или ORDER BY col
или table_options

Оператор ALTER TABLE обеспечивает возможность изменять структуру существующей таблицы. Например, можно добавлять или удалять столбцы, создавать или уничтожать индексы или переименовывать столбцы либо саму таблицу. Можно также изменять комментарий для таблицы и ее тип. See section 6.5.3 Синтаксис оператора CREATE TABLE.

DROP

6.5.6 Синтаксис оператора DROP TABLE

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE]

Оператор DROP TABLE удаляет одну или несколько таблиц. Все табличные данные и определения удаляются, так что будьте внимательны при работе с этой командой!

В версии MySQL 3.22 и более поздних можно использовать ключевые слова IF EXISTS, чтобы предупредить ошибку, если указанные таблицы не существуют.

Опции RESTRICT и CASCADE позволяют упростить перенос программы. В данный момент они не задействованы.

Примечание: DROP TABLE автоматически принимает текущую активную транзакцию.


                    
                    

Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Поделиться

Дисциплины