Curso SQL Server — Edição Definitiva

Módulo 2 — CREATE DATABASE, USE e GO (criar e selecionar bancos com segurança)

Aprenda a criar um banco de dados do zero, entender onde os arquivos ficam, configurar opções essenciais, alternar o contexto com USE e separar lotes com GO — tudo com implicações e exemplos.

Visão geral

Neste módulo você vai criar seu primeiro banco, entender onde o SQL Server grava os dados (arquivos MDF/NDF/LDF), escolher collation e autogrowth de forma consciente, e usar USE e GO corretamente no SSMS.

Express: há limite típico de 10 GB por base de dados. Planeje o crescimento e monitore espaço.

CREATE DATABASE (básico)

O que é / Para que serve: Criar um novo banco pronto para uso.

Sintaxe: CREATE DATABASE NomeDoBanco;

Como funciona: O servidor cria entrada no catálogo do sistema e gera arquivos de dados (MDF) e log (LDF) nos caminhos padrão.

Implicações & boas práticas: • Requer permissão de CREATE DATABASE (tipicamente sysadmin). • Em Express, monitore o tamanho. • Evite nomes com espaços/acentos; use letras, números e sublinhado.

CREATE DATABASE TreinamentoSQL;
GO

-- Verifique se o banco existe e o estado
SELECT name, state_desc, create_date
FROM sys.databases
WHERE name = 'TreinamentoSQL';

CREATE DATABASE (avançado — arquivos e crescimento)

O que é / Para que serve: Definir locais e tamanhos dos arquivos de dados/log, collation e growth.

Sintaxe: CREATE DATABASE Nome ON PRIMARY ( NAME = N'Nome_Data', FILENAME = N'C:\DadosSQL\Nome.mdf', SIZE = 64MB, FILEGROWTH = 64MB ) LOG ON ( NAME = N'Nome_Log', FILENAME = N'C:\DadosSQL\Nome_log.ldf', SIZE = 64MB, FILEGROWTH = 64MB ) COLLATE Latin1_General_CI_AI;

Como funciona: Cria o banco com arquivos no caminho indicado; SIZE define tamanho inicial, FILEGROWTH define o crescimento automático. A collation controla ordenação/sensibilidade a acentos/maiúsculas.

Implicações & boas práticas: • Use tamanhos e growth fixos (MB/GB), evitando percentuais. • Escolha collation compatível com seu idioma (ex.: CI=case-insensitive, AI=accent-insensitive). • Garanta disco suficiente e backups do log.

CREATE DATABASE Loja
ON PRIMARY (
  NAME = N'Loja_Data',
  FILENAME = N'C:\SQLData\Loja.mdf',
  SIZE = 128MB, FILEGROWTH = 128MB
)
LOG ON (
  NAME = N'Loja_Log',
  FILENAME = N'C:\SQLData\Loja_log.ldf',
  SIZE = 128MB, FILEGROWTH = 128MB
)
COLLATE Latin1_General_CI_AI;
GO

SELECT name, physical_name, size*8/1024 AS SizeMB
FROM sys.database_files
WHERE DB_NAME(database_id) = 'Loja';

Arquivos MDF, NDF e LDF — entendendo o armazenamento

Você consulta os arquivos com sys.database_files e pode ajustar crescimento usando ALTER DATABASE ... MODIFY FILE.

SELECT name, type_desc, physical_name, size*8/1024 AS SizeMB, growth*8/1024 AS GrowthMB
FROM sys.database_files
WHERE DB_NAME(database_id) = 'Loja';

Ajustar crescimento automático (recomendado)

Usar MB/GB fixos evita fragmentação e explosões de log. Ajuste com:

ALTER DATABASE Loja
MODIFY FILE ( NAME = N'Loja_Data', FILEGROWTH = 128MB );
GO
ALTER DATABASE Loja
MODIFY FILE ( NAME = N'Loja_Log', FILEGROWTH = 128MB );
Evite FILEGROWTH em porcentagem (ex.: 10%). Em bancos grandes, cada crescimento será cada vez maior.

Collation: o que é e quando escolher

Collation determina regras de comparação/ordenação (sensibilidade a acento e maiúsculas). Exemplos comuns: Latin1_General_CI_AI (case-insensitive, accent-insensitive) e Latin1_General_CS_AS (case-sensitive, accent-sensitive).

USE

O que é / Para que serve: Mudar o banco de dados de contexto (onde os próximos comandos rodam).

Sintaxe: USE NomeDoBanco;

Como funciona: O cliente envia um lote que troca o contexto da sessão; a partir daí, objetos referenciados sem schema/banco serão buscados nesse contexto.

Implicações & boas práticas: • Esquecer o USE pode criar objetos no banco errado. • Em scripts, explicite sempre o USE antes de criar tabelas. • Após GO, o contexto permanece no banco selecionado.

USE TreinamentoSQL;
GO

-- Agora, este CREATE TABLE será feito em TreinamentoSQL
CREATE TABLE dbo.Clientes (
  ClienteID INT IDENTITY PRIMARY KEY,
  Nome NVARCHAR(100) NOT NULL
);
GO

-- Conferir em qual banco você está:
SELECT DB_NAME() AS BancoAtual;

GO (separador de lotes no SSMS)

O que é / Para que serve: Separar lotes no SSMS/SqlCmd; não é T‑SQL do servidor.

Sintaxe: GO

Como funciona: O SSMS envia ao servidor tudo que está acima até o GO como um lote independente. Variáveis locais não atravessam GO. Algumas instruções (como CREATE PROCEDURE) precisam começar um novo lote.

Implicações & boas práticas: • Não use GO dentro de procedures/functions/views. • Em scripts com dependências, use GO para garantir a criação antes do próximo passo.

-- Exemplo: variável não atravessa GO
DECLARE @x INT = 1;
PRINT @x;
GO
-- PRINT @x; -- ERRO: @x não existe neste lote

-- Exemplo: criar e em seguida usar
CREATE TABLE dbo.Teste (ID INT);
GO
INSERT INTO dbo.Teste VALUES (1);

Erros comuns & soluções

Exercícios práticos

  1. Crie um banco TreinoLoja com MDF/LDF em um diretório próprio e FILEGROWTH de 64MB.
  2. Use USE para selecionar o banco e crie uma tabela simples dbo.Categorias.
  3. Liste os arquivos em sys.database_files e valide os tamanhos e crescimento.
  4. Opcional: ajuste a collation do banco para Latin1_General_CI_AI na criação e observe o efeito nas comparações de texto.

Referências oficiais & leituras recomendadas