Spec-Zone .ru
спецификации, руководства, описания, API
|
Начните с таблицы t1
это создается как показано здесь:
CREATE TABLE t1 (a INTEGER,b CHAR(10));
Переименовать таблицу от t1
к t2
:
ALTER TABLE t1 RENAME t2;
Изменить столбец a
от INTEGER
к TINYINT NOT NULL
(отъезд имени то же
самое), и изменить столбец b
от CHAR(10)
к CHAR(20)
так же как переименование этого от b
к
c
:
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
Добавить новое TIMESTAMP
столбец называют d
:
ALTER TABLE t2 ADD d TIMESTAMP;
Добавить индексирование на столбце d
и a UNIQUE
индексируйте на столбце a
:
ALTER TABLE t2 ADD INDEX (d), ADD UNIQUE (a);
Удалить столбец c
:
ALTER TABLE t2 DROP COLUMN c;
Добавить новое AUTO_INCREMENT
целочисленный столбец называют c
:
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c);
Мы индексировали c
(как a PRIMARY KEY
) потому что
AUTO_INCREMENT
столбцы должны быть индексированы, и мы объявляем c
как NOT NULL
потому что столбцы первичного ключа
не могут быть NULL
.
Для NDB
таблицы, также возможно изменить тип хранения, используемый для таблицы или столбца. Например, рассмотрите NDB
таблица, составленная как показано здесь:
mysql> CREATE TABLE t1 (c1 INT) TABLESPACE ts_1
ENGINE NDB;
Query OK, 0 rows affected (1.27 sec)
Чтобы преобразовать эту таблицу в находящееся на диске хранение, можно использовать следующий ALTER TABLE
оператор:
mysql>ALTER TABLE t1 TABLESPACE ts_1 STORAGE DISK;
Query OK, 0 rows affected (2.99 sec)Records: 0 Duplicates: 0 Warnings: 0mysql>SHOW CREATE TABLE t1\G
*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `c1` int(11) DEFAULT NULL) /*!50100 TABLESPACE ts_1 STORAGE DISK */ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.01 sec)
Не необходимо, чтобы на табличную область сослались, когда таблица была первоначально составлена; однако, на
табличную область нужно сослаться ALTER TABLE
:
mysql>CREATE TABLE t2 (c1 INT) ts_1 ENGINE NDB;
Query OK, 0 rows affected (1.00 sec)mysql>ALTER TABLE t2 STORAGE DISK;
ERROR 1005 (HY000): Can't create table 'c.#sql-1750_3' (errno: 140)mysql>ALTER TABLE t2 TABLESPACE ts_1 STORAGE DISK;
Query OK, 0 rows affected (3.42 sec)Records: 0 Duplicates: 0 Warnings: 0mysql>SHOW CREATE TABLE t2\G
*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t2` ( `c1` int(11) DEFAULT NULL) /*!50100 TABLESPACE ts_1 STORAGE DISK */ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.01 sec)
Чтобы изменить тип хранения отдельного столбца, можно использовать ALTER TABLE ... MODIFY
[COLUMN]
. Например, предположите, что Вы создаете MySQL Cluster Disk Data table с двумя столбцами,
используя это CREATE TABLE
оператор:
mysql>CREATE TABLE t3 (c1 INT, c2 INT)
->TABLESPACE ts_1 STORAGE DISK ENGINE NDB;
Query OK, 0 rows affected (1.34 sec)
Изменить столбец c2
от находящегося на диске до памяти включайте пункт ПАМЯТИ
ХРАНЕНИЯ в определение столбца, используемое оператором ALTER TABLE, как показано здесь:
mysql> ALTER TABLE t3 MODIFY c2 INT STORAGE
MEMORY;
Query OK, 0 rows affected (3.14 sec)Records: 0 Duplicates: 0 Warnings: 0
Можно превратить столбец в памяти в находящийся на диске столбец при использовании STORAGE
DISK
подобным способом.
Столбец c1
использует находящееся на диске хранение, так как это - значение по
умолчанию для таблицы (определенный на уровне таблицы STORAGE DISK
пункт в CREATE TABLE
оператор). Однако, столбец c2
память использования, как может быть замечен здесь в выводе ШОУ CREATE TABLE
:
mysql> SHOW CREATE TABLE t3\G
*************************** 1. row *************************** Table: t3Create Table: CREATE TABLE `t3` ( `c1` int(11) DEFAULT NULL, `c2` int(11) /*!50120 STORAGE MEMORY */ DEFAULT NULL) /*!50100 TABLESPACE ts_1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.02 sec)
Когда Вы добавляете AUTO_INCREMENT
столбец, значения столбцов заполнены в
порядковыми номерами автоматически. Для MyISAM
таблицы, можно установить первый
порядковый номер, выполняясь SET INSERT_ID=
прежде value
ALTER TABLE
или при использовании AUTO_INCREMENT=
табличная опция. См. Раздел
5.1.4, "Системные Переменные Сервера". value
С MyISAM
таблицы, если Вы не изменяетесь AUTO_INCREMENT
столбец, на порядковый номер не влияют. Если Вы отбрасываете AUTO_INCREMENT
столбец и затем добавляет другого AUTO_INCREMENT
столбец, числа повторно упорядочиваются, начинаясь 1.
Когда репликация используется, добавляя AUTO_INCREMENT
столбец к таблице не мог бы
произвести то же самое упорядочивание строк на ведомом устройстве и ведущем устройстве. Это происходит, потому
что порядок, в котором нумеруются строки, зависит от определенного механизма хранения, используемого для таблицы
и порядка, в который были вставлены строки. Если важно иметь тот же самый порядок на ведущее устройство и
ведомое устройство, строки должны быть упорядочены прежде, чем присвоиться AUTO_INCREMENT
число. Принятие, что Вы хотите добавить AUTO_INCREMENT
столбец к таблице t1
, следующие операторы производят новую таблицу t2
идентичный t1
но с AUTO_INCREMENT
столбец:
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY)SELECT * FROM t1 ORDER BY col1, col2;
Это предполагает что таблица t1
имеет столбцы col1
и
col2
.
Этот набор операторов также произведет новую таблицу t2
идентичный t1
, с добавлением AUTO_INCREMENT
столбец:
CREATE TABLE t2 LIKE t1;ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY;INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
Гарантировать то же самое упорядочивание и на ведущем устройстве и на ведомом устройстве, всех столбцах t1
должен быть сослан в
ORDER BY
пункт.
Независимо от метода, используемого, чтобы создать и заполнить копию, имеющую AUTO_INCREMENT
столбец, заключительный шаг должен отбросить исходную таблицу и затем переименовать копию:
DROP t1;ALTER TABLE t2 RENAME t1;