#para criar um database
create database loja;

#para entrar no database
use loja;

#para criar uma tabela com os tipos.
#define se os campos podem ser nulos ou não
#cria a chave primárias no campo id_cliente
CREATE TABLE cliente (
  id_cliente int NOT NULL,
  nome varchar(50) NOT NULL,
  endereco varchar(50),
  id_cidade int(11) NOT NULL,
  email varchar(50),
CONSTRAINT PK_Cliente PRIMARY KEY (id_cliente)
);

#também é possível definir a chave primária colocando primary key na frente do campo
#CREATE TABLE `cliente` (
#  `id_cliente` int PRIMARY KEY,

#caso a tabela tenha sido criada sem chave primária, podemos definir
ALTER TABLE cliente ADD (CONSTRAINT PK_Cliente PRIMARY KEY (id_cliente));
#colocar nome pra a chave primária não é obrigatório
ALTER TABLE cliente ADD (CONSTRAINT PRIMARY KEY (id_cliente));

#para apagar uma chave primária
ALTER TABLE cliente DROP PRIMARY KEY;

#para adicionar um campo em uma tabela
ALTER TABLE cliente ADD COLUMN tel VARCHAR(11) NOT NULL;

#alterar o tamanho de um campo
ALTER TABLE cliente MODIFY tel VARCHAR(10) NOT NULL;

#renomear campo de uma tabela
ALTER TABLE cliente CHANGE tel telefone VARCHAR(11);

#apagar uma coluna de uma tabela
ALTER TABLE cliente DROP COLUMN telefone;

#para renomear uma tabela
RENAME TABLE cliente TO clientes;

#para apagar uma tabela
DROP TABLE clientes;

#CHAVE COMPOSTA
#chave composta permite definir que mais de uma campo da tabela forme a chave primária
#uma chave composta por 2 colunas permite repetir o valor de uma coluna, mas não das duas
#abaixo é criado uma tabela de conta, com duas colunas como chave
CREATE TABLE conta (
numero_conta INTEGER,
id_agencia INTEGER,
id_cliente INTEGER,
saldo DECIMAL(10,2),
CONSTRAINT PK_Conta PRIMARY KEY (numero_conta, id_agencia)
);

#também é possível definir chave composta após a tabela criada
ALTER TABLE Conta ADD CONSTRAINT  PRIMARY KEY(numero_conta, id_agencia);

#RELACIONAMENTO ENTRE TABELAS
#para relacionar a tabela cliente com cidade já na criação de cidade
#o relacionamento deve ser criado na tabela filha (que recebe a chave da tabela pai)
#No caso, a tabela cidade é pai, porque fornece sua chave primária para tabela cliente
#A tabela cliente é filha, porque recebe a chave primária de cidade, formando a chave estrangeira
#o código cria a tabela cliente relacionando com cidade
CREATE TABLE `cliente` (
  `id_cliente` int PRIMARY KEY,
  `nome` varchar(50) NOT NULL,
  `endereco` varchar(50),
  `id_cidade` int(11) NOT NULL,
  `email` varchar(50),
   CONSTRAINT FK_Cidade FOREIGN KEY(id_cidade) REFERENCES cidade(id_cidade)
);

#para relacionar a tabela caso ela já tenha sido criada sem relacionamento
ALTER TABLE cliente ADD (CONSTRAINT FK_Cidade FOREIGN KEY(id_cidade) REFERENCES cidade(id_cidade));

#É uma boa prática criar uma coluna na tabela para ser chave primária (como id_cliente por exemplo)
#Também é uma boa prática encarregar o próprio SGBD de inserir automaticamente um valor único
#Quando a tabela é criada, podemos definir a coluna chave primária como auto incremento
 CREATE TABLE `cliente` (
  `id_cliente` int PRIMARY KEY AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `endereco` varchar(50) DEFAULT "Rua",
  `id_cidade` int(11) NOT NULL,
  `email` varchar(50)
);




