Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rudinelson

Regras de Validação no MySQL, tem como?

Recommended Posts

Olá pessoal!Sou novo no forum e no MySQL, e to com algumas dúvidas...eu to querendo criar uma tabela apenas com a disciplina e as notas de 3 provas, sendo que o valor das notas deve ter 1 casa decimal (ex.: 10,0), e deve ficar entre 0,0 e 10,0.Tentei fazer assim:

create table notas (disciplina char(30), AV1 decimal(2,1) unsigned, AV2 decimal(2,1) unsigned, AV3 decimal (2,1) unsigned)

só não sei como fazer para que o valor fique entre 0,0 e 10,0.e eu queria saber se tem como bloquear a inserção de valores maiores que o limite, pois o MySQL não bloqueia e sim adota o maior valor para aquele campo.ex.:

insert into notas (disciplina, av1) values("Matemática", 10000.0)

o MySQL insere 9.9 no campo av1...alguem sabe me dizer se tem como fazer isso?se eu tiver sido muito confuso na explicação do problema me avisem que eu tento explicar melhor ok?Obrigado.rudinelson

Compartilhar este post


Link para o post
Compartilhar em outros sites

O manual diz:

Os tipos NUMERIC e DECIMAL são implementados como o mesmo tipo pelo MySQL, como permitido pelo padrão SQL92. Eles são usados por valores para os quais é importante preservar a exatidão como, por exemplo, dados monetários. Quando é declarado um campo de algum desses tipos a precisão e a escala podem ser (e normalmente é) especificadas; por exemplo: salario DECIMAL(5,2)Neste exemplo, 5 (precisão) representa o número de digitos decimais significantes que serão armazenados no valor, e 2 (escala) representa o número de dígitos que serão armazenados após o ponto decimal. Neste caso, no entanto, a faixa de valores que podem ser armazendos na coluna salario é de -99.99 a 99.99. (MySQL pode, na verdade, armazenar numeros acima de 999.99 neste campo porque ele não precisa armazenar o sinal para números positivos).

Quanto a verificação do valor, creio que você deve fazer isso por meio da linguagem que estiver utilizando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você também pode tentar utilizar Trigger, se for a versão 5.0 ou superior do mysql.

Ex: criei uma tabela chamada notas no banco de dados test e criei a trigger:

DELIMITER $$

 

DROP TRIGGER `test`.`trg_teste`$$

 

CREATE TRIGGER `test`.`trg_teste` BEFORE INSERT on `test`.`notas`

FOR EACH ROW BEGIN

IF NEW.NOTA1 < 0.0 OR NEW.NOTA1 > 10.0 THEN

SET NEW.NOTA1 := 0.0;

END IF;

IF NEW.NOTA2 < 0.0 OR NEW.NOTA2 > 10.0 THEN

SET NEW.NOTA2 := 0.0;

END IF;

END$$

 

DELIMITER ;

Resumindo: verifica se o novo valor do campo NOTA1 não está na faixa permitida, idem para o campo NOTA2.

Caso queira criar mensagens, etc. Nosso amigo Eclesiastes já deu a dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.