Tipo de dados DECIMAIS do MySQL

Resumo : neste tutorial, você aprenderá sobre DECIMALo 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 DECIMALpermite armazenar valores numéricos exatos no banco de dados. Na prática, você costuma usar o DECIMALtipo 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 é DECIMAL, 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 intervalo Pé de 1 a 65.
  • Dé a escala que representa o número de dígitos após a vírgula. O intervalo Dé 0 e 30. O MySQL exige que Dseja menor ou igual a (<=) P.

Isso DECIMAL(P,D)significa que a coluna pode armazenar até Pdígitos com D decimais. O intervalo real da coluna decimal depende da precisão e da escala.

Além da DECIMALpalavra-chave, você também pode usar DEC, FIXEDou NUMERICporque são sinônimos de DECIMAL.

O exemplo a seguir define a amountcoluna com DECIMALtipo 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 DECIMALvalores. 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 DECIMALtipo 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 materialstabela possui três colunas:

  • idé a coluna de chave primária de incremento automático com o tipo de dados.INT
  • descriptionrepresenta a descrição do material com o VARCHARtipo de dados.
  • costrepresenta o custo do material, que tem o DECIMAL(19,4).

A cost coluna pode armazenar até 19 dígitos com 4 casas decimais.

Segundo, insira dados na materialstabela.

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 materialstabela.

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 DECIMALo 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 o DECIMALtipo de dados que possui até Pdígitos e Dcasas decimais.
  • O DECIMAL(P)é equivalente a DECIMAL(P,0)e DECIMALé equivalente a DECIMAL(P, 0).

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *