Use o comando CREATE TABLE para criar uma nova tabela inicialmente vazia no banco de dados atual. O comando CREATE TABLE cria automaticamente um tipo de dado que representa o tipo tupla (tipo de estrutura) correspondente a uma linha da tabela.
As cláusulas de restrição opcionais especificam restrições (ou testes) que linhas novas ou atualizadas devem satisfazer para que uma operação de inserção ou atualização seja bem-sucedida. Uma restrição é uma regra nomeada; ou seja, um objeto SQL que ajuda a definir conjuntos de valores válidos, limitando os resultados de operações de inserção, atualização ou exclusão que são usados em uma tabela. Netezza não suporta verificações de restrição; se especificar restrições, você deverá realizar a verificação de restrição e integridade referencial.)
Também é possível gravar cada restrição de coluna como uma restrição de tabela. Uma restrição de coluna é apenas uma conveniência notacional, se a restrição afetar apenas uma coluna.
CREATE TABLE <tablename> [ ( <col>[,<col>… ] ) ] AS
<select_clause> [ DISTRIBUTE ON [HASH] ( <col>[<col>,… ] ) ]
A frase distribute on especifica a chave de distribuição; a palavra hash é opcional.
CREATE TABLE <tablename> (col1 int, col2 int, col3 int)
DISTRIBUTE ON RANDOM;
A frase distribute on random especifica a distribuição round-robin.
CREATE TABLE <tablename> (col1 int, col2 int, col3 int);
O sistema Netezza escolhe uma chave de distribuição. Não há nenhuma maneira de assegurar o que essa chave será, e isso pode variar dependendo da liberação do software Netezza .
CREATE [ TEMPORARY | TEMP ] TABLE <table>
( <col> <type> [<col_constraint>][,<col> <type> [<col_constraint>]…]
[<table_constraint>[,<table_constraint>… ] )
[ DISTRIBUTE ON { RANDOM | [HASH] (<col>[,<col>…]) } ]
[ ORGANIZE ON { (<col>) | NONE } ]
[ ROW SECURITY ]
[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
[ CONSTRAINT <constraint_name> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
O sistema permite e mantém a chave primária, padrão, chave estrangeira, exclusiva e referências. O sistema IBM® Netezza não suporta verificação de restrição e integridade referencial. O usuário deve assegurar verificações de restrições e integridade referencial.
| Entrada | Descrição |
|---|---|
| TEMP[ORARY] | A tabela a ser criada deve ser uma tabela temporária. |
| <table> | O nome da tabela a ser criada. |
| <col> | O nome de uma coluna a ser criada na nova tabela. |
| <type> | O tipo de dado da coluna. |
| DISTRIBUTE ON | Cada tabela no banco de dados deve ter uma chave de distribuição que consiste em uma a quatro colunas. O padrão é RANDOM, o que faz com que o sistema selecione uma chave de distribuição aleatória. |
| HASH | Este parâmetro pode ser especificado para esclarecimento, mas não tem efeito sobre o comando. |
| ORGANIZE ON | Em quais colunas (de um a quatro) a tabela deve ser organizada. Elas não podem ser especificadas para tabelas externas. Se colunas forem especificadas, a tabela não poderá ter nenhuma visualização materializada, e todos os tipos de dados de coluna especificados deverão ser mapeáveis por zona. A reorganização de dados da tabela entra em vigor quando GROOM TABLE é executada. Para obter mais informações, consulte "Usando tabelas base em cluster" no IBM Netezza System Administrator’s Guide. |
| ROW SECURITY | Crie a tabela com a segurança em nível de linha. |
| <constraint_name> | O nome que deve ser dado a uma restrição de coluna ou restrição da tabela. Se você não especificar um nome, o sistema gerará um. |
| NOT DEFERRABLE | DEFERRABLE | Controla se a restrição pode ser adiada para o final da transação. NOT DEFERRABLE é o padrão. (Netezza não suporta verificação de restrição e integridade referencial.) |
| INITIALLY | Especifica ou DEFERRED (no final da transação) ou IMMEDIATE (no final de cada instrução). |
| NOT NULL | NULL | Se a coluna pode conter valores nulos. NULL é o padrão. |
| UNIQUE (restrição de coluna e tabela) | Se cada valor na coluna deve ser exclusivo. |
| PRIMARY KEY (restrição de coluna e tabela) | Se as colunas especificadas devem formar a chave primária da tabela. Essa restrição é essencialmente uma combinação das restrições UNIQUE e NOT NULL, mas a identificação de um conjunto de colunas como uma chave primária também fornece metadados sobre o design do esquema. Uma chave primária significa que outras tabelas podem contar com esse conjunto de colunas como um identificador exclusivo para as linhas. É possível especificar apenas uma restrição de chave primária para uma tabela, como uma restrição de coluna ou como uma restrição de tabela. O conjunto de colunas que compõem a chave principal deve ser diferente de qualquer outro conjunto de colunas nomeado por qualquer restrição exclusiva definida para a tabela. |
| DEFAULT (restrição de coluna) | O valor padrão que deve ser colocado em cada linha para esta coluna. |
| REFERENCES (restrição de coluna) | As colunas especificadas da nova tabela devem conter apenas valores que correspondem aos valores nas colunas especificadas da tabela especificada. |
| Tabela FOREIGN KEY e REFERENCES (restrição de tabela) | As colunas especificadas da nova tabela devem conter apenas valores que correspondem aos valores nas colunas especificadas da tabela especificada. Se você não especificar uma coluna, o valor deverá corresponder à chave primária da tabela. As colunas especificadas da tabela de referência devem ter uma restrição de chave exclusiva ou primária nessa tabela. |
| MATCH FULL | MATCH FULL impede que uma coluna de uma chave estrangeira multicolunas seja nula se outras partes da chave estrangeira não forem nulas. Esse é o padrão. MATCH PARCIAL é não suportado. |
| ON UPDATE | ON DELETE | A ação que deve ser executada quando a tabela ou colunas especificadas são atualizadas ou excluídas:
|
O comando tem as seguintes saídas:
| Saída | Descrição |
|---|---|
| CREATE TABLE | O sistema retorna essa mensagem se o comando for concluído com êxito. |
| ERROR | O sistema retorna essa mensagem se a criação de tabelas falhar. A mensagem de erro fornece texto descritivo, como: ERROR: Relation 'table' already exists. |
Você deve ser o usuário administrador, o proprietário do banco de dados ou esquema ou sua conta deve ter o privilégio Criar Tabela.
A seguir está o uso de amostra:
MYDB.SCH1(USER)=>
CREATE TABLE name (
code CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY,
title CHARACTER VARYING(40) NOT NULL,
did DECIMAL(3) NOT NULL,
date_prod DATE,
kind CHAR(10),
len INTERVAL HOUR TO MINUTE
);
MYDB.SCH1(USER)=>
CREATE TABLE name (
code CHAR(5),
title VARCHAR(40),
did DECIMAL(3),
date_prod DATE,
kind VARCHAR(10),
len INTERVAL HOUR TO MINUTE,
CONSTRAINT code_title PRIMARY KEY(code,title)
);
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3),
name CHAR VARYING(40),
PRIMARY KEY(did)
);
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3) PRIMARY KEY,
name VARCHAR(40)
);
Os dois exemplos são equivalentes. O primeiro exemplo usa a sintaxe de restrição da tabela. O segundo exemplo usa a notação de restrição da coluna.
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3) CONSTRAINT no_null NOT NULL,
name VARCHAR(40) NOT NULL
);