Resumo : neste tutorial, você aprenderá sobre DECIMAL
o tipo de dados MySQL e como usá-lo para armazenar valores numéricos exatos nos bancos de dados.
Introdução ao tipo de dados MySQL DECIMAL
O tipo de dados MySQL DECIMAL
permite armazenar valores numéricos exatos no banco de dados. Na prática, você costuma usar o DECIMAL
tipo de dados para colunas que preservam a precisão exata, por exemplo, dados monetários em sistemas financeiros.
Para definir uma coluna cujo tipo de dados é DECIMA
L, use a seguinte sintaxe:
column_name DECIMAL(P,D);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
P
é a precisão que representa o número de dígitos significativos. O intervaloP
é de 1 a 65.D
é a escala que representa o número de dígitos após a vírgula. O intervaloD
é 0 e 30. O MySQL exige queD
seja menor ou igual a (<=)P
.
Isso DECIMAL(P,D)
significa que a coluna pode armazenar até P
dígitos com D
decimais. O intervalo real da coluna decimal depende da precisão e da escala.
Além da DECIMAL
palavra-chave, você também pode usar DEC
, FIXED
ou NUMERIC
porque são sinônimos de DECIMAL
.
O exemplo a seguir define a amount
coluna com DECIMAL
tipo de dados.
amount DECIMAL(6,2);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo, a coluna de valor pode armazenar 6 dígitos com 2 casas decimais; portanto, o intervalo da coluna de valor é de 9.999,99 a -9.999,99.
MySQL permite que você use a seguinte sintaxe:
column_name DECIMAL(P);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Isso é equivalente a:
column_name DECIMAL(P,0);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste caso, a coluna não contém parte fracionária ou ponto decimal.
Além disso, você ainda pode usar a seguinte sintaxe:
column_name DECIMAL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O valor padrão de P é 10 e D é 0, o que equivale ao seguinte:
column_name DECIMAL(10,0);
Armazenamento DECIMAL MySQL
O MySQL atribui o armazenamento para partes inteiras e fracionárias separadamente. MySQL usa um formato binário para armazenar os DECIMAL
valores. Ele contém 9 dígitos em 4 bytes.
Para cada parte, são necessários 4 bytes para armazenar cada múltiplo de 9 dígitos. O armazenamento necessário para os dígitos restantes é ilustrado na tabela a seguir:
Dígitos restantes | Bytes |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7–9 | 4 |
Por exemplo, DECIMAL(19,9)
possui 9 dígitos para a parte fracionária e 19-9 = 10 dígitos para a parte inteira. A parte fracionária requer 4 bytes. A parte inteira requer 4 bytes para os primeiros 9 dígitos; para 1 dígito restante, é necessário mais 1 byte. No total, a DECIMAL(19,9)
coluna requer 9 bytes.
Tipo de dados MySQL DECIMAL e dados monetários
Freqüentemente usamos o DECIMAL
tipo de dados para dados monetários, como preços, salários, saldos de contas e assim por diante. Se você projetar um banco de dados que lide com dados monetários, a sintaxe a seguir deverá servir.
amount DECIMAL(19,2);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
No entanto, se você quiser cumprir as regras dos Princípios Contábeis Geralmente Aceitos (GAAP) , a coluna monetária deve ter pelo menos 4 casas decimais para garantir que o valor de arredondamento não exceda US$ 0,01. Neste caso, você deve definir a coluna com 4 casas decimais da seguinte forma:
amount DECIMAL(19,4);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Exemplo de tipo de dados MySQL DECIMAL
Primeiro, crie uma nova tabela chamada materials
:
CREATE TABLE materials (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(255) NOT NULL,
cost DECIMAL(19,4) NOT NULL
);
Linguagem de código: PHP ( php )
A materials
tabela possui três colunas:
id
é a coluna de chave primária de incremento automático com o tipo de dados.INT
description
representa a descrição do material com oVARCHAR
tipo de dados.cost
representa o custo do material, que tem oDECIMAL(19,4)
.
A cost
coluna pode armazenar até 19 dígitos com 4 casas decimais.
Segundo, insira dados na materials
tabela.
INSERT INTO materials(description, cost)
VALUES
('Bicycle', 500.34),
('Seat', 10.23),
('Break', 5.21);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, consulte os dados da materials
tabela.
SELECT
*
FROM
materials;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----+-------------+----------+
| id | description | cost |
+----+-------------+----------+
| 1 | Bicycle | 500.3400 |
| 2 | Seat | 10.2300 |
| 3 | Break | 5.2100 |
+----+-------------+----------+
3 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Resumo
- Use
DECIMAL
o tipo de dados MySQL para armazenar valores numéricos exatos, como dados financeiros, no banco de dados. - Use
column_name DECIMAL (P, D)
para definir uma coluna com oDECIMAL
tipo de dados que possui atéP
dígitos eD
casas decimais. - O
DECIMAL(P)
é equivalente aDECIMAL(P,0)
eDECIMAL
é equivalente aDECIMAL(P, 0)
.