Guia de BANCO DE DADOS:
Estrutura da linguagem do MYSQL:
- Valores literais: Cadeia de caracteres, numéricos, data e hora
Estrutura da linguagem:
Os valores literais:
Valores literais no MySQL são os valores fixos que você escreve diretamente nele, sem depender de nada externo, já que esses valores foram programados diretamente no código fonte.
Cadeia De Caracteres (Strings):
É uma sequência de bytes ou caracteres, entre '(aspas simples) ou "(aspas duplas).Exemplo:
'Aqui um texto'
"Outro texto"
As cadeias de aspas colocadas uma ao lado da outra são concatenadas em um corda única.
Exemplo:
'Mesma coisa'
'Mesma' ' ' 'coisa'
OBSERVE:
Uma de cadeia de string pode ter um conjunto de opcional de caracteres, para designar qual conjunto de caracteres específicos usar: [_charset_name]'Texto...' [COLLATE collation_name]
- [_charset_name]: Isso define como os bytes da string são interpretados, tipo qual charset (character set), conjunto de caracteres, escolher.
- 'Texto...': O próprio texto.
- [COLLATE collation_name]: Isso define como strings são comparadas e ordenadas dentro do charset (character set), conjunto de caracteres.
SELECT _latin1'Texto aqui...';
SELECT _binary'Texto aqui...';
SELECT _utf8mb4'Texto aqui...' COLLATE utf8mb4_danish_ci;
OBSERVE:
Antes da string, pode se usar a marcação de que a string é Unicode.
A letra N que vem de "National", garante que a string irá vir com o padrão de Unicode, UTF-8.
Exemplo:
Os três são as mesmas coisas, já que no SQL, ele ignora case (case-insensitive),
não diferencia maiúsculas de minúsculas.
SELECT N'Texto aqui...';
SELECT n'Texto aqui...';
SELECT _utf8'Texto aqui...';
OBSERVE:
Dentro de uma string, certas sequências têm um significado especial, e cada uma dessas sequências começa com uma \ (barra invertida), formando assim a fuga personagem.
Exemplo:
Sequência:
Representa:
\0
Caractere NUL, Byte zero (X'00'), usado pra dizer “fim de string” em C
\'
Escape literal de ' (aspas simples)
\"
Escape literal de " (aspas duplas)
\b
No terminal, apaga o anterior, backspace, retrocesso
\n
Line feed (LF), Alimentação de Linha. Pula pra próxima linha
\r
Carriage Return (Retorno de carro), retorna pro início da linha (tipo "overwrite", sobrescrever), formatação cross-platform, multiplataforma
\t
Tabulação, um tab normal
\Z
ASCII 26 (Ctrl+Z), marca de fim de arquivo em Windows. Para a leitura de arquivo no Windows, causa bug em LOAD DATA
\\
Escape literal da \ (barra invertida)
\%
Escape literal do % (percentual)
\_
Escape literal de _ (sublinhado)
OBSERVE:
Para todos outras sequências de escape, a barra invertida é ignorada!
Numéricos:
Literais numéricos podem ser exatos (inteiros e decimais) ou aproximados (ponto flutuante).
Os números de valor exato, têm uma parte inteira, fracionária ou ambas, e são usados quando precisão
é crucial,
e podem ser assinados (ser positivo ou negativo). O DECIMAL (também chamado de NUMERIC, DEC, ou
FIXED)
é um tipo de ponto fixo, ou seja, são usados para manter a precisão exata.
Eles podem ser assim, 1, 2, 3, 4, 5, 7-3, 4+2...
Ou assim, 1.1, 2.3, 3.4...
Os numéricos de valor aproximado, são representados em notação ciêntifica, com uma mantissa
(coeficiente) e expoente,
e são usados quando a precisão não é tão importante, e podem ser assinados (ser positivo ou
negativo).
São os FLOAT e DOUBLE (também chamados de DOUBLE PRECISION e REAL) e esses são os tipos de ponto
flutuante
Eles podem ser assim, 1, 2E31, 5E-7-2, 9E785...
OBSERVE:
Mesmo que dois números parecerem semelhantes, eles podem ser tratados de formas diferentes,
tudo depenedrá se esse número for um valor exato ou aproximado.
Data e hora:
Padrões aceitos aqui:
A data e a hora não seguem apenas um tipo de formato, como por exemplo, podem ser
representadas como caracteres (string) ou em números. Porém é aconselhável seguir os padrões da
MYSQL e ISO
(INTERNATIONAL ORGANIZATION FOR STANDARDIZATION), ORGANIZAÇÃO INTERNACIONAL DE
NORMALIZAÇÃO:
Para data (DATE): AAAA-MM-DD (2025-05-01)
Para hora (TIME): hh:mm:ss (22:09:30)
Para carimbo de data / hora (TIMESTAMP): AAAA-MM-DDThh:mm:ss (2025-05-01T22:09:30)
Note também que, como o MYSQL é um BD, ele também segue os padrões do ODBC (OPEN DATABASE CONNECTIVITY), CONECTIVIDADE DE BANCO DE DADOS ABERTO, e que é um padrão da MICROSOFT pra conectar aplicações com diferentes BD, aos quais são:
Para data (DATE): {d '2025-05-01'}
Para hora (TIME): {t '22:09:30'}
Para carimbo de data / hora (TIMESTAMP): {ts '2025-05-01 22:09:30'}
Note também que o MYSQL aceita tranquilamente formato padrão do SQL, mas diferente dele, no MYSQL não é obrigado a declarar o tipo antes, que no SQL são:
Para data (DATE): DATE '2025-05-01'
Para hora (TIME): TIME '2025-05-01'
Para carimbo de data / hora (TIMESTAMP): TIMESTAMP '2025-05-01 22:09:30'
Coisas importantes e algumas dicas:
OBSERVE:Repare que o TIMESTAMP, pode ser separado por um espaço ou por um T (T de Time, Tempo).
OBSERVE:
O MYSQL pode aceitar outros valores para a data e hora como: AAAAMMDD, AA-MM-DD, AAMMDD, hhmmss, hms, h:m, ms, s, DD hh:mm:ss.
Eles podem ser assim:
20250501 - 2025-05-01
"25-05-01" - 2025-05-01
250501 - 2025-05-01
220930 - 22:09:30
832 - 08:03:02
"8:3" - 08:03:00
3020 - 00:30:20
20 - 00:00:20
"5 12:00:00" -132:00:00
(5 dias × 24h + 12h = 132 horas)
'10:70:80' - 11:11:20
(10h + 70min (1h 10min) +80s (1min 20s) = 11h 12min 20s)
-123456 - -12:34:56
Aceita negativo também
...
OBSERVE:
Se usar a data / hora como número, de atenção para isso, pois irá facilitar a sua vida, e impedir algum erro posteriormente: se lembre que a hora sempre será no padrão 24h no MYSQL, e como o MYSQL é bem flexível, pode aceitar muitos valores (desde negativos, a dias, horas, minutos, etc) convertidos
Note também se está dentro desses limites, porque assim será mais fácil trabalhar com as numerações, 6, 8, 12 ou 14 dígitos no total.
Isso sem contar com as frações de segundo, já que o MYSQL, pode suportar um total de 6 dígitos após o ponto na contagem dos segundos: 22:09:30.123456
Eles podem ser assim:
6 dígitos: 250501 (2025-05-01) / 220930 (22:09:30)
8 dígitos: 20250501 (2025-05-01)
12 dígitos: 250501220930 (2025-05-01 22:09:30)
14 dígitos: 20250501220930 (2025-05-01 22:09:30)
OBSERVE:
A data e a hora, nos formatos de caracteres (string), podem aceitar e funcionar com qualquer caractere não padrão (!, @, ^, \n, espaços a mais, etc) como delimitador, porém, será transmitido um aviso (warning).
Eles podem ser assim, '2025/05/01', '2025^05^01', '2025@05@01', '2025 05 01', '2025-05-01 22&09&30'...
Fusos horários:
Antes de tudo, tenha em mente isso a respeito de data / hora no MYSQL: O TIMESTAMP possui funções diferentes a respeito do DATETIME.- Sendo que o IMESTAMP tem a função de converter o fuso, e não guardar, basicamente, serve para as coisas que mudam constantemente de lugar, tipo a hora do login em algum sistema.
- Já o DATETIME, ignora por completo o fuso, e nem converte nada, servindo basicamente para armazenar datas fixas, tipo numa agenda de algum evento.
'2025-05-01 22:09:30-03:00'
Isso significa que a data / hora foi registrada no fuso UTC -03:00 (ex: BRASIL). O MySQL com isso vai:
-
converter pro fuso horário configurado da sessão, apenas se o tipo for TIMESTAMP, se for
DATETIME, ele ignorar o fuso.
- Não pode ter espaços antes do fuso (nesse caso é o -03:00): '2025-05-01 22:09:30 -03:00' -> ISSO ESTÁ ERRADO!
- Não pode ter zona nomeada aqui: '2025-05-01 22:09:30 America/rio_de_janeiro' -> ISSO ESTÁ ERRADO!
'2025-05-01 22:09:30-03:00' -> ISSO ESTÁ CERTO!
'2025-05-01 22:09:30 -03:00' -> ISSO ESTÁ CERTO!
EM CASOS DE DÚVIDA, SEMPRE BUSCAR A DOCUEMNTAÇÃO OFICIAL!