:: DEVELOPER ZONE
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nome_tabela [(definição_create,...)]
[table_options] [select_statement]
ou
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nome_tabela [(]LIKE nome_antigo_tabela[)];
definição_create:
nome_coluna tipo [NOT NULL | NULL] [DEFAULT valor_padrão] [AUTO_INCREMENT]
[[PRIMARY] KEY] [COMMENT 'string'] [definição_referência]
| [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
| KEY [nome_indice] (index_nome_coluna,...)
| INDEX [nome_indice] (index_nome_coluna,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] (index_col_name,...)
| FULLTEXT [INDEX] [nome_indice] (index_nome_coluna,...)
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
[definição_referência]
| CHECK (expr)
tipo:
TINYINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| INT[(tamanho)] [UNSIGNED] [ZEROFILL]
| INTEGER[(tamanho)] [UNSIGNED] [ZEROFILL]
| BIGINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| REAL[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| FLOAT[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| DECIMAL(tamanho,decimais) [UNSIGNED] [ZEROFILL]
| NUMERIC(tamanho,decimais) [UNSIGNED] [ZEROFILL]
| CHAR(tamanho) [BINARY | ASCII | UNICODE]
| VARCHAR(tamanho) [BINARY]
| DATE
| TIME
| TIMESTAMP
| DATETIME
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT
| TEXT
| MEDIUMTEXT
| LONGTEXT
| ENUM(value1,value2,value3,...)
| SET(value1,value2,value3,...)
index_nome_coluna:
nome_coluna [(tamanho)] [ASC | DESC]
definição_referência:
REFERENCES nome_tabela [(index_nome_coluna,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE opção_referência]
[ON UPDATE opção_referência]
opção_referência:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
opções_tabela: table_option [table_option] ...
opções_tabela:
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 = 'caminho absluto para o diretório'
| INDEX DIRECTORY = 'caminho absluto para o diretório'
| DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]
instrução_select:
[IGNORE | REPLACE] [AS] SELECT ... (Alguma instrução válida)
CREATE TABLE
cria uma tabela com op nome dado no banco de dados atual.
As regras para nomes de tabelas permitidos são dados em Secção 6.1.2, “Nomes de Banco de dados, Tabela, Índice, Coluna e Alias”. Por padrão a tabela é criada no banco de dados atual. Um erro ocorre se não houver o banco de dados atual ou se a tabela já existir.
No MySQL Versão 3.22 ou posterior, o nome de tabela pode ser especificado
como nome_bd.nome_tabela para criar a tabela em um banco de dados
específico. Ele funciona sem se preoocupar se existe um banco de dados atual.
A partir do MySQL Versão 3.23, você pode usar a palavra-chave TEMPORARY
qaundo você criar uma tabela. A tabela temporária é visível apenas a para a
conexão atual, e será automaticamente deletada quando a conexão é fechada.
Isto significa que duas conexões diferentes podem usar o mesmo nome de tabela
temporária sem conflitos outras ou com uma tabela existente com o mesmo nome.
(A tabela existente é escondida até que a tabela temporária seja deletada).
A partir do MySQL 4.0.2 você deve ter o privilégio CREATE TEMPORARY TABLES
para poder criar tabelas temporárias.
No MySQL Versão 3.23 ou posterior você pode utilizar as palavras-chaves
IF NOT EXISTS para que não ocorra um erro se a tabela já existir.
Note que não há verificação de que a tabela existente tem uma estrutura
idêntica a aquela indicada pela instrução CREATE TABLE
A partir da versão 4.1.0, o atributo SERIAL pode ser usado com um
alias para BIGINT NOT NULL AUTO_INCREMENT UNIQUE. Este é um recuros
para compatibilidade.
Como no MySQL 3.23, você pode criar uma tabela de autra adicionando uma
instrução SELECT no fim da instrução CREATE TABLE:
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
Os índices não são transportados para a nova tabela, e algumas conversões
de tipos de coluna podem ocorrer. Por exemplo, o atributoAUTO_INCREMENT
não está preservado e colunas VARCHAR podem se tornar colunas CHAR.
Quando criar uma tabela com CREATE ... SELECT, de um apelido para
qualquer chamada de função ou expressões em uma consulta. Se você não o fizer,
a instrução CREATE pode falhar ou resultar em nomes de colunas indesejáveis.
CREATE TABLE artists_and_works SELECT artist.name, COUNT(work.artist_id) AS number_of_works FROM artist LEFT JOIN work ON artist.id = work.artist_id GROUP BY artist.id;
No MySQL 4.1, você pode especificar explicitamente o tipo para uma coluna gerada:
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
No MySQL 4.1 você pode utilizar LIKE para criar uma tabela baseada
em uma definição de outra tabela. No MySQL 4.1 você também pode especificar
o tipo para uma coluna gerada:
CREATE TABLE new_tbl LIKE orig_tbl;
Cada tabela nome_tabela é representada por algum arquivo no diretório
de banco de dados. No caso das tabelas tipo MyISAM você irá obter:
CREATE TABLE ... LIKE não copia nenhuma opção de tabela DATA DIRECTORY ou INDEX DIRECTORY que foi especificada para a tabela
original.
| Arquivo | Proposito |
nome_tabela.frm |
Arquivo de formato (definição) da tabela. |
nome_tabela.MYD |
Arquivo de dados |
nome_tabela.MYI |
Arquivo Índice |
Para mais informações de propriedades de varios tipo de coluna, veja Secção 6.2, “Tipos de Campos”:
Se nem NULL nem NOT NULL for especificado, a coluna é
tratada como se NULL fosse especificado.
Uma coluna integer pode ter o atributo adicional AUTO_INCREMENT.
Quando você insere um valor de NULL (recomendado) ou 0 em uma
coluna AUTO_INCREMENT indexada, a coluna é definida com o valor da
próxima sequência. Normalmente ele é valor+1, onde
valor é o maior valor para a coluna column atualmente na tabela.
A sequência de AUTO_INCREMENT começa com 1.
See Secção 12.1.3.32, “mysql_insert_id()”.
A partir do MySQL 4.1.1, especificando o parâmetro NO_AUTO_VALUE_ON_ZERO
para a opção do servidor --sql-mode ou a variável do servidor sql_mode
permite que você aramzene 0 nas colunas AUTO_INCREMENT como 0,
em vez de gerar uma nova sequência de valores.
See Secção 4.1.1, “Opções de Linha de Comando do mysqld”.
Se você deletar a linha contendo o valor máximo para uma coluna
AUTO_INCREMENT, o valor será reutilizado por uma tabela
ISAM, ou BDB, mas não por tabelas MyISAM ou
InnoDB. Se você deletar todas as linhas na sua tabela com
DELETE FROM nome_tabela (sem um WHERE) no modo
AUTOCOMMIT, a sequencia será reiniciada em todos os tipos
de tabela, exceto InnoDB. See Secção 7.5.12.5, “Como Funciona uma Coluna AUTO_INCREMENT no InnoDB”.
Nota: Só pode haver uma coluna AUTO_INCREMENT por tabela,
e ela deve ser indexada e não pode ter uma valor DEFAULT. No MySQL
Versão 3.23, uma coluna AUTO_INCREMENT funcionará corretamente apenas
se conter apenas valores positivos. Inserir um número negativo é
considerado como a inserção de um número positivo muito grande.
Isto ocorre para evitar problemaa de precisão quando os números vão de
positivo para negativo e também para assegurar que não se obtenha,
acidentalmente, uma coluna AUTO_INCREMENT que contenha 0.
Em tabelas MyISAM e BDB você pode especificar colunas
AUTO_INCREMENT secundárias em uma chave ulti-coluna.
See Secção 3.6.9, “Usando AUTO_INCREMENT”.
Para tornar MySQL compatível com alguns aplicativos ODBC, você pode encontrar
o valor AUTO_INCREMENT da última linha inserida com a seguinte consulta:
SELECT * FROM nome_tabela WHERE auto_col IS NULL
Valores NULL são tratados em colunas TIMESTAMP de modo diferente
de outros tipos de colunas. Você não pode armazenar um NULL literal em
uma coluna TIMESTAMP; definindo a coluna com NULL lhe atribui a
a data e a hora atual. Como colunas TIMESTAMP se comportam desta forma,
os atributos NULL e NOT NULL não se aplicam de modo normal e são
ignorados se você os especificar.
Por outro lado, tornar o uso de colunas TIMESTAMP mais fácil para os
clientes MySQL, o servidor relata que tal coluna pode ter o valor NULL
atribuído (a que é verdade), mesmo que TIMESTAMP nunca contenham,
realmente, um valor NULL. Você pode ver isto quando você utiliza
DESCRIBE nome_tabela para obter informações sobre sua tabela.
Note que definir uma coluna TIMESTAMP com 0 não é o mesmo que
definí-la com NULL, porque 0 é um valor TIMESTAMP
válido.
Um valor padrão (DEFAULT) tem que ser constante, ele não pode ser uma
função ou uma expressão.
Se nenhum valor DEFAULT é especificado para uma coluna, o MySQL
atribuirá um automaticamente, como a seguir.
Se a coluna aceitar NULL como um valor, o valor padrão é NULL.
Se a coluna é declarada como NOT NULL, o valor padrão depende do
tipo de coluna:
Para tipos numéricos não declarados com o atributo AUTO_INCREMENT,
o padrão é 0. Para uma coluna AUTO_INCREMENT, o valor
padrão é o próximo valor na sequência.
Para tipos date e time diferentes de TIMESTAMP, o padrão é o valor
zero apropriado para o tipo. Para a primeira coluna TIMESTAMP
na tabela, o padrão é a data e hora atuais.
See Secção 6.2.2, “Tipos de Data e Hora”.
Para tipos string diferentes de ENUM, o valor padrão é uma string
vazia. Para ENUM, o padrão é o primeiro valor enumerado.
Valores padrões devem ser constantes. Isto significa, por exemplo, que você
não pode definir o padrão de uma coluna date como o valor de funções como
NOW() or CURRENT_DATE.
Um comentário para uma coluna pode ser especificado com a opção
COMMENT. O comentário é mostrado pela instrução
SHOW CREATE TABLE e por SHOW FULL COLUMNS.
Esta opção está disponível a partir do MySQL 4.1.
(Ela é perimitida mas ignorada em versões anteriores.)
KEY é normalmente um sinônimo para INDEX.
A partir da versão 4.1, o atributo de chave PRIMARY KEY também pode
ser especificado apenas como KEY. Isto foi implementado para
compatibilidade com outros bancos de dados.
No MySQL,uam chave UNIQUE só pode ter valores distintos. Um erro ocorre
se você tantar adicionar uma nova linha com uma chave que coincida com uma já
existente.
PRIMARY KEY é uma chave única (KEY) onde todas as colunas chaves
devem ser definidas como NOT NULL. Se elas não forem explicitamente
declaradas como NOT NULL, isto será feito implicitamente e sem aviso.
No MySQL a chave é chamada PRIMARY. Uma tabela pode ter apenas uma
PRIMARY KEY. Se você não tiver uma PRIMARY KEY e alguma aplicação
perguntar pela PRIMARY KEY em sua tabela, o MySQL retornará a primeira
chave UNIQUE, que não possui nenhuma coluna NULL, como a
PRIMARY KEY.
Uma PRIMARY KEY pode ser um índice multi-coluna. Porém, você não pode
criar um índice multi-coluna usando o atributo de chave PRIMARY KEY
em uma especificação de coluna. Fazendo assim apenas colunas simples poderão ser
marcadas como primárias. Você deve utilizar uma cláusula PRIMARY KEY(index_nome_coluna, ...) separada.
Um índice UNIQUE é aquele no qual todos os valores no índice devem ser
distintos. A exceção a isto é que se for permtido conter valores NULL
em uma coluna no índice, ele pode conter múltiplos valores NULL. Este
exceção não se aplica a tabelas BDB, que permitem apenas um único
NULL.
Se a chave PRIMARY ou UNIQUE consistir de apenas uma coluna e ela
é do tipo inteiro, você também poderá se referir a ela como _rowid
(novo na versão 3.23.11).
Se você não atribuir um nome ao índice que não é um PRIMARY KEY, ele
terá o mesmo nome da prmeira index_nome_coluna, com um sufixo
opicional (_2, _3, ...) para torná-lo único. Você pode
nome de índices para uma tabela usando SHOW INDEX FROM nome_tabela.
See Secção 4.6.8.1, “Recuperando Informações sobre Bancos de Dados, Tabelas, Colunas e Índices”.
Apenas os tipos de tabelas MyISAM, InnoDB, e BDB
suportam índices em coluna que possam ter valores NULL. Nos outros
casos você deve declarar tais colunas NOT NULL ou um erro será retornado.
Com a sintaxe nome_coluna(length) em uma especificação de índice, você
pode criar um índice que utiliza apenas os primeiros length() bytes de
uma coluna CHAR ou VARCHAR. Isto pode tornar o arquivo de índices
muito menor. See Secção 5.4.4, “Índices de Colunas”.
Apenas os tipos de tabela MyISAM e (a partir do MySQL 4.0.14)
InnoDB suportam índice em colunas BLOB
e TEXT. Ao colocar um índice em uma coluna BLOB ou TEXT
você sempre DEVE especificar o tamanho do índice, até 255 bytes. Por exemplo:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
Uma especificação index_col_name pode finalizar com ASC ou
DESC. Esta palavras chaves são permitidas para estensão futura para
especificar o armazenamento do valor do índice em crescente ou decrescente.
Atualmente elas são analisadas mas ignoradas; valores de índice são sempre
armazenados em ordem crescente.
Quando você utiliza ORDER BY ou GROUP BY com uma coluna
TEXT ou BLOB, o servidor ardena valores usando apenas o
número inicial de bytes, indicado pela variável do servidor
max_sort_length. See Secção 6.2.3.2, “Os Tipos BLOB e TEXT”.
No MySQL Versão 3.23.23 ou posterior, você também pode criar índices
FULLTEXT especiais. Eles são usados para busca full-text. Apenas o
tipo de tabela MyISAM suporta índices FULLTEXT. Eles só podem
ser criados em colunas CHAR, VARCHAR, e TEXT.
A indexação sempre ocorre sobre toda a coluna; índices parciais não são
suportados. Veja Secção 6.8, “Pesquisa Full-text no MySQL” para detalhes de operação.
No MySQL Versão 3.23.44 ou posterior, tabelas InnoDB suportam verificação
de chaves estrangeiras. See Secção 7.5, “Tabelas InnoDB”. Note que a sintaxe FOREIGN KEY
no InnoDB é mais restrita que a sintaxe apresentada acima. As colunas da
tabela indicada devem ser nomeadas explicitmente. O InnoDB suporta ambas as
ações ON DELETE e ON UPDATE em chaves esrtrangiras nos MySQL
3.23.50 e 4.0.8, respectivamente.
Veja a seção InnoDB do manual para a sintaxe precisa.
See Secção 7.5.5.2, “Restrições FOREIGN KEY”.
Para outros tipos de tabelas, MySQL Server analisa as sinatxes FOREIGN KEY,
CHECK e REFERENCES no comando CREATE TABLE, mas sem tal
ação ser tomada. See Secção 1.8.4.5, “Chaves Estrangeiras”.
Para tabelas ISAM e MyISAM, cada coluna NULL
tem um bit extra, arredondado para o byte mais próximo.
O tamanho máximo de um registro em bytes pode ser calculado como a seguir:
tamanho da linha = 1
+ (soma do tamanho da coluna)
+ (números de coluna NULL + delete_flag 7)/8
+ (número de colunas de tamanho variável)
delete_flag é 1 para tabelas com formato de registro estático.
Tabelas estáticas usam um bit no registro para um parâmetro que indica
se o linha foi deletada. delete_flag é 0 para tabelas dinâmicas
porque este parâmetro é armazenado no cabeçalho da linha dinâmica.
Estes cálculos não se aplicam à tabelas InnoDB, para a qual o
tamanho do armazenamento não é diferente para colunas NULL
comparados a colunas NOT NULL.
A opçao opção_tabela e SELECT só são implmentadas
no MySQL Versão 3.23 e acima.
A opção TYPE para especificar o tipo de tabela possui
os seguintes valores:
| Tipo de tabela | Descrição |
BDB ou BerkeleyDB
|
Tabelas de transação segura com bloqueio de página. See Secção 7.6, “Tabelas BDB ou BerkeleyDB”.
|
HEAP |
Os dados desta tabela são armazenados apenas na memória. See Secção 7.4, “Tabelas HEAP”.
|
ISAM |
O mecanismo de armazenamento original. See Secção 7.3, “Tabelas ISAM”.
|
InnoDB |
Tabelas com transações eguras com bloqueio de linha. See Secção 7.5, “Tabelas InnoDB”.
|
MERGE |
Uma coleção de tabelas MyISAM usadas como uma tabela. See Secção 7.2, “Tabelas MERGE”.
|
MRG_MyISAM |
Um apelido para tabelas MERGE |
MyISAM |
O novo mecanismo de armazenamento portável binário que substitui o ISAM. See Secção 7.1, “Tabelas MyISAM”.
|
See Capítulo 7, Tipos de Tabela do MySQL.
Se um tipo de tabela é especificado, e este tipo não está disponível, MySQL
irá usar MyISAM.
Por exemplo, se uma definição de tabela inclui a opção TYPE=BDB mas o MySQL
não suporta tabelas BDB, a tabela será criada como uma tabela
MyISAM. Isto torna possível de se ter uma configuração de replicação onde
você tem tabelas transacionaisno master mas as tabelas criadas no slave são
não transacionais (para obter mais velocidade). No MySQL 4.1.1 você obtém um
aviso se o tipo de tabela especificado não é aceito.
Os outros tipos de tabelas são utilizados para otimizar o comportamento da tabela. Na maioria dos casos, você não precisa especificar nenhuma delas. As opções funcionam com todos os tipos, a menos que haja indicação:
| Opção | Descrição |
AUTO_INCREMENT |
O próximo valor AUTO_INCREMENT que você quer definir em sua tabela (apenas MyISAM; para definir o primeiro valor auto incrementeem uma tabela InnoDB insira uma linha com um valor de menos um e delete esta linha).
|
AVG_ROW_LENGTH |
Uma aproximação do tamanho médio de linha em sua tabela. Você só precisa definí-la para tabelas grnades com tamanho de registros variáveis. |
CHECKSUM |
Defina com 1 se você quiser manter um checksum para todas as linha (deixa a tabela um pouco mais lenta para atualizações, mas fica mais fácil encontrar tabelas corrompidas) (apenas MyISAM).
|
COMMENT |
Um comentário de 60 caracteres para a sua tabela. |
MAX_ROWS |
Número máximo de linhas que você deseja armazenar na tabela. |
MIN_ROWS |
Número mínimo de linha que você planeja armazenar na tabela. |
PACK_KEYS |
Defina com 1 se você quiser um índice menor, Normalmente torna a atualização mais lenta e a leitura mais rápida (apenas MyISAM e ISAM). Definr com 0 irá desabilitar empacotamento das chaves. Definir com DEFAULT (MySQL 4.0) dirá ao mecanismo de armazenamento para empacotar apenas colunas CHAR/VARCHAR longas.
|
PASSWORD |
Criptografa o arquivo .frm com uma senha. Esta opção não fa nada na versão padrão do MySQL.
|
DELAY_KEY_WRITE |
Defina com 1 se quiser atrasar a atualização das chaves da tabela até que a tabela seja fechada (apenas MyISAM).
|
ROW_FORMAT |
Define como as linhas devem ser armazenadas. Atualmente esta opção só funciona com tabelas MyISAM, as quais suportam os formatos de linha DYNAMIC e FIXED. See Secção 7.1.2, “Formatos de Tabelas MyISAM”.
|
Quando você utiliza uma tabela MyISAM, MySQL usa o produto de
MAX_ROWS * AVG_ROW_LENGTH para decidir o tamanho da tabela resultante.
Se você não especificar qualquer uma das opções acima, o tamanho máximo de
uma tabela será 4G (ou 2G se o seu sistema operacional só suporta tabelas de
2G). A razão para isto é apenas manter o tamanho dos ponteiros baixo para
tornar o índice menor e mais rápido se você realmente não precisa de tabelas
grandes.
Se você não utilizar PACK_KEYS, o padrão é só empacotar strings, não
números. Se você utilizar PACK_KEYS=1, números também serão empacotados.
Ao empacotar chaves numéricas binárias, o MySQL usará a compactação prefixada.
Isto significa que você só terá grandes benefícios disto se você tiver muitos
números iguais. Compactação prefixada significa que toda a chave precisa de
um byte extra para indicar quantos bytes das caves anteriores são o mesmo da
próxima chave (note que o ponteiro para a linha é armazenado na ordem do byte
mais alto em primeiro diretamente depois da chave, para aumentar compactação).
Isto significa que se você tiver muitas chaves iguais em duas linhas consecutivas,
todas os chaves ``iguais'' seguintes irão normalmente ter apenas 2 bytes (incluindo o
ponteiro para a linha). Compare isto isto ao caso comum onde as chaves seguintes
irão levar tamanho_armazenamento_chave + tamanho_ponteiro (nomralmente 4). Por
outro lado, se todas as chaves são totalmente diferente, você usará 1 byte
por chave, se a chave não puder ter valores NULL. (Neste caso o tamanho
da chave empacotada será armazenado no mesmo byte que é usado para marcar se
a chave é NULL.)
No MySQL 3.23,
Se você especificar um SELECT depois de uma instrução CREATE,
MySQL criará novos campos para todos os elemento em SELECT.
Por exemplo:
mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (a), KEY(b))
-> TYPE=MyISAM SELECT b,c FROM test2;
Isto irá criar uma tabela MyISAM com três colunas, a, b e c.
Note que as colunas da instrução SELECT são inseridas do lado
correto da tabela, nào sobreposta nela. Considere o seguinte exemplo:
mysql> SELECT * FROM foo; +---+ | n | +---+ | 1 | +---+ mysql> CREATE TABLE bar (m INT) SELECT n FROM foo; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM bar; +------+---+ | m | n | +------+---+ | NULL | 1 | +------+---+ 1 row in set (0.00 sec)
Para cada linha na tabela foo, uma linha é inserida em bar com
os valores de foo e os valores padrões para a nova coluna.
CREATE TABLE ... SELECT não irá criar automaticamente nenhum índice
para você. Isto é feito intencionalmente para deixar o comando o mais flexível
possível. Se você quiser ter índices em uma tabela criada, você deve
especificá-lo antes da instrução SELECT:
mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Se ocorrer qualquer erro durante enquanto os dados são copiados para a tabela, ele será automaticamente deletado.
Você pode preceder o SELECT por IGNORE ou REPLACE
para indicar como tratar registros que duplicam valores de chave única.
Com IGNORE, novos registros que duplicam um registro existente em
um valor de chave única são descartados. Com REPLACE, novos registros
substituem registros que tem o mesmo valor de chave única. Se nem IGNORE
nem REPLACE são especificados, valir de chave unica duplicados resultam
em erro.
Para assegurar que o log binário/atualização pode ser usado para recriar a
tabela original, MySQL não permitirá inserções concorrentes durante um
CREATE TABLE ... SELECT.
A opção RAID_TYPE irá ajudá-lo a exceder o limite de 2G/4G limit
para arquivo de dados MyISAM (não o arquivo de índice) em sistemas
operacionais que não suportam arquivos grandes. Note que esta opção não é
recomendada para sistema de arquivos que suportam arquivos grandes!
Você pode obter mais velocidade da gargalo de E/S colocando diretorios
RAID em diferentes discos físicos. RAID_TYPE funcionará em
qualquer sistema operacional, desde que você tenha configurado o MySQL com
--with-raid. Por agora o único RAID_TYPE permitido é STRIPED
(1 e RAID0 são utilizados para isto).
Se você especificar RAID_TYPE=STRIPED para tabeals MyISAM,
MyISAM criará subdiretórios RAID_CHUNKS chamados 00, 01, 02
no diretório de banco de dados. Em cada um destes diretórios MyISAM
criará uma nome_tabela.MYD. Ao escrever dados no arquivo de dados,
o manipulador RAID irá mapear o primeiro RAID_CHUNKSIZE *1024
bytes para o primeiro arquivo e os próximos RAID_CHUNKSIZE *1024
bytes para o próximo arquivo.
UNION é utilizado quando você quer utilizar uma coleção de tabelas
identicas como uma. Isto só funciona com tabelas MERGE.
See Secção 7.2, “Tabelas MERGE”.
No momento você precisa ter privilégios SELECT, UPDATE e
DELETE nas tabelas mapeadas para uma tabela MERGE. Todas as
tabelas mapeadas devem estar no mesmo banco de dados na tabela MERGE.
Se você quiser inserir dados em uma tabela MERGE, você tem que especificar
com INSERT_METHOD na tabela onde o registro deve ser inserido.
INSERT_METHOD é uma opção útil somente para tabelas MERGE.
See Secção 7.2, “Tabelas MERGE”. Esta opção foi introduzida no MySQL 4.0.0.
Na tabela criada a chave PRIMARY será colocado primeiro, seguida de
todas a chaves únicas (UNIQUE) e então das chaves normais. Isto ajuda o
otimizador MySQL para priorizar qual chave utilizar e também a detectaa mais
rapidamente chaves únicas (UNIQUE) duplicadas.
Utilizando DATA DIRECTORY='directorio' ou INDEX DIRECTORY='directorio'
você pode especificar onde o mecanismo de armazenamento deve colocar os seus
arquivos de tabelas e índices. Note que ``diretório'' deve ser um caminho
completo para o diretório (não um caminho relativo).
Isto só funciona para tabelas MyISAM no MySQL 4.0, quando não
estiver usando a opção --skip-symlink. See Secção 5.6.1.2, “Utilizando Links Simbólicos para Tabelas”.
© 1995-2005 MySQL AB. All rights reserved.
