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.
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.
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';
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';
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 );
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).
USEO 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);