Um artigo sobre como criar tabelas em MySQL, É preciso trabalhar em algumas outras áreas além do vídeo para garantir a subsistência. Assim, aqui ficam algumas notas de MySQL para os que aogra se estão a iniciar na linguagem e andem por aí à procura de dicas.
COMANDOS DE DEFINIÇÃO DE DADOS
Passo a apresentar os comandos mais comuns para a definição de bases de dados e tabelas, bem como os comandos de definição de outro tipo de estruturas (triggers, funções, procedimentos e eventos temporais).
SINTAXE DE CRIAÇÃO DE UMA BASE DE DADOS:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] nome_bd
[opções] …
Opções:
[DEFAULT] CHARACTER SET [=] nome_charset
[DEFAULT] COLLATE [=] nome_collation
Os termos DATABASE e SCHEMA são sinónimos. As opções CHARACTER SET e COLLATE permitem definir o código de carateres a utilizar por omissão nos campos de texto das tabelas da base de dados.Exemplo:
CREATE DATABASE IF NOT EXISTS jogo
CHARACTER SET UTF8
COLLATE utf8_unicode_ci;
A base de dados definida com este código utiliza, por defeito, o código de carateres UTF8 que permite que os campos de texto contenham carateres internacionais de qualquer origem.
Se se pretenderem desenvolver aplicaç\oes que tenham utilizadores registados originários de qualquer país – o que é usual em aplicaç\oes que funcionem na Internet – é conveniente que os campos de texto usem o código de carateres UTF8.
A SINTAXE DE CRIAÇÃO DE UMA TABELA É APRESENTADA ABAIXO.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nome_tbl
(definição_de_campos, …)
[opções_de_tabela]
A definição de campos de uma tabela tem a sintaxe indicada abaixo. As opções de tabela mais relevantes são apresentadas sob a forma de exemplos mais à frente.
SINTAXE DE DEFINIÇÃO DE CAMPOS DE UMA TABELA MYSQL:
definição_de_campos
nome_coluna definição_coluna
[CONSTRAINT [símbolo]] PRIMARY KEY [tipo_index]
(nome_col_index, …) [opção_index] …
{index|key} [nome_index] [tipo_index]
(nome_col_index, …) [opção_index] …
[CONSTRAINT [símbolo]] UNIQUE [INDEX | KEY]
[nome_index] [tipo_index] (nome_col_index,...)
[opção_index] …
{FULLTEXT | SPATIAL} [INDEX | KEY] [nme_index]
(nome_col_index, …) [opção_index] …
[CONSTRAINT [símbolo]] FOREIGN KEY
[nome_index] (nome_col_index, …)
definição_de_referência
CHECK (expr)
A definição de campos de uma tabela necessita ainda da sintaxe de definição de colunas e de defnição de referências que são apresentadas abaixo.
SINTAXE DE DEFINIÇÃO DE COLUNAS NUMA TABELA MYSQL:
definição_coluna:
tipo_de_dados [NOT NULL | NULL]
[DEFAULT valor_defeito]
[AUTO_INCREMENT]
[UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'texto']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
[definição_de_referência]
EXEMPLO DA CRIAÇÃO DE DUAS TABELAS LIGADAS ENTRE SI ATRAVÉS DE UMA CHAVE ESTRANGEIRA:
CREATE TABLE pais (
pais_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
pais_nome VARCHAR(255) COMMENT 'nome do pais'
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
CREATE TABLE utilizador (
utl_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
utl_nome VARCHAR(255) COMMENT 'nome do utilizador',
utl_passe VARCHAR(255) COMMENT 'pswd do utilizador',
utl_data INT UNSIGNED COMMENT 'data inscr',
utl_paisid INT UNSIGNED COMMENT 'id do país',
FOREIGN KEY fk1(utl_paisid) REFERENCES pais(pais_id)
) ENGINE=INNODB DE
A tabela país tem dois campos: pais_id e pais_nome. O primeiro é a chave primária e tem o atributo AUTO_INCREMENT que lhe atribui um valor inteiro sequencial sempre que, numa inserção, o valor deste campo não for especificado. O segundo é um campo de texto de tamanho variável.
A tabela utilizador tem cinco campos: utl_id, utl_nome, utl_passe, utl_data, e utl_paisid. O primeiro campo é a chave primária e tem o atributo de AUTO_INCREMENT. O segundo e o terceiro são campos de texto variável, com um máximo de 255 carateres. O quarto e do tipo inteiro e vai ser usado para armazenar a data de inscrição no formato UNIX_TIMESTAMP, ou seja, vai guardar a data contada em segundos desde 1 de janeiro de 1970. Em datas posteriores a este formato pos possibilitam um processamento informático mais rápido. O último campo, o utl_paisid, tem que ter exactamente o mesmo tipo de dados do campo pais_id da tabela país (INT UNSIGNED) pois é utilizado como chave estrangeira (FOREIGN KEY) e referencia o campo pais_id da tabela país.