1
resposta

TINYINT: recebido por default 1 para tinying e 1 para default

Na aula MYSQL cap3, o professor criou uma regra que por default a coluna "recebido" seja ZERO '0'. conforme abaixo:

(A) ALTER TABLE COMPRAS MODIFY COLUMN recebido TINYINT(1) DEFAULT '0';

No entanto, na atividade "Reescrevendo o CREATE TABLE" pede para que a regra da coluna "recebido" seja por default '1'. A solução foi descrita abaixo:

(B) recebido tinyint(1) DEFAULT 1,

Não se supõe que se é por default 1, então o "tinyint" deveria ser zero? porque colocou 1 tanto para tinying como o default se as opções deveriam ser 0 e 1 como no exemplo (A)?

1 resposta

Olá Demis, tudo bom?

Entendo sua confusão! Mas acho que você cometeu um erro de conceito. Olha só. Quando você declara uma coluna, você passa 1. O nome dela 2. O tipo dela - O número de caracteres desse tipo 3. As opções da coluna

Por exemplo:

recebido TINYINT(1) DEFAULT 0;
# recebido -> nome da coluna
# TINYINT -> tipo da coluna
# TINYINT(1) -> tipo da coluna, mas com limitação de caracteres.
# no caso, só cabe um caractere do tipo TINYINT na coluna
# DEFAULT 0 -> valor padrão da coluna quando for criar uma entrada.
# no caso, o valor padrão é 0

O valor entre parênteses é o número de caracteres que aquela coluna aceita, e por isso não é necessário fazer a alteração que você sugeriu.

Mudar o DEFAULT para 1 faz com que, ao inserir na tabela sem especificar o valor do campo recebido, ele tenha automaticamente valor 1. No caso de alteração da tabela, o valor registrado na coluna não muda, inclusive valores nulos:

CREATE TABLE Compras (
  produto VARCHAR(255) PRIMARY KEY,
  recebido tinyint(1) DEFAULT NULL
);


INSERT INTO Compras (produto) VALUES ('Livro de Mysql');
INSERT INTO Compras (produto, recebido) VALUES ('Livro de NoSQL', 2);

SELECT * FROM Compras;
+----------------+----------+
| produto        | recebido |
+----------------+----------+
| Livro de Mysql |     NULL |
| Livro de NoSQL |        2 |
+----------------+----------+

ALTER TABLE Compras CHANGE COLUMN recebido TINYINT(1) DEFAULT 0;
INSERT INTO Compras (produto) VALUES ('Livro de Ruby');

SELECT * FROM Compras;
+----------------+----------+
| produto        | recebido |
+----------------+----------+
| Livro de Mysql |     NULL |
| Livro de NoSQL |        2 |
| Livro de Ruby  |        0 |
+----------------+----------+

ALTER TABLE Compras CHANGE COLUMN recebido recebido TINYINT(1) DEFAULT 1;
INSERT INTO Compras (produto) VALUES ('Livro de Mongo');

SELECT * FROM Compras;
+----------------+----------+
| produto        | recebido |
+----------------+----------+
| Livro de Mysql |     NULL |
| Livro de NoSQL |        2 |
| Livro de Ruby  |        0 |
| Livro de Mongo |        1 |
+----------------+----------+