Jump to content
Cleudiney T Brandão

Criar coluna em tabela que aceite NULL e UNIQUE

Recommended Posts

Pessoal alguém me dá uma ajuda com Mysql por favor.
Tenho uma coluna em meu BD que precisaria o seguinte: 
Ela não é obrigatória mas se preenchida não poderia ter outras ocorrências dela.
É um campo que ao meu ver seria UNIQUE mas que aceitasse NULL.

Share this post


Link to post
Share on other sites

UNIQUE aceita normalmente "parâmetros" nulos em sua coluna,

segue exemplo:

 

SQL

CREATE TABLE users (
  idUser INT NOT NULL AUTO_INCREMENT,
  nome VARCHAR(100) NOT NULL,
  chave INT,
  PRIMARY KEY(idUser),
  UNIQUE (chave)
);

INSERT INTO users (nome, chave) VALUES 
('Jadson e Judson', 29992),
('Judson e Jadson', NULL),
('Judson', NULL);

 

RESULTADO

image.png.0e3fbbbff3200c5a9b4b10b9e442d845.png

Share this post


Link to post
Share on other sites

Crie uma verificação, segue exemplo:

 

CÓDIGO

<?php
	if ( $_POST ) {
		# VERIFICA O POST 'CAMPO' CHAVE
		if ( $_POST [ 'chave' ] == 0 ) {
			$_POST [ 'chave' ] = NULL;
		}

		$pdo = new PDO ( 'mysql:host=localhost;dbname=imasters', 'root', '' );
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

		$stmt = $pdo->prepare ( 'INSERT INTO users (nome, chave) VALUES (?, ?)' );
		$stmt->bindValue (1, $_POST [ 'nome' ]);
		$stmt->bindValue (2, $_POST [ 'chave' ]);
		$stmt->execute ();

		if ( $stmt->rowCount () > 0 ) {
			$stmt = $pdo->prepare ( 'SELECT * FROM users' );
			$stmt->execute ();

			$ret = $stmt->fetchAll ( PDO::FETCH_OBJ );

			echo "<pre>";
			var_dump (
				$ret
			);
		}
	}
?>

<!DOCTYPE html>
<html>
	<head>
		<title> EXAMPLE </title>
	</head>

	<body>
		<form action="#" method="post">
			<label>Nome: </label>
			<input type="text" name="nome" />
			<br />
			<label>Chave: </label>
			<input type="number" name="chave" />
			<br />
			<br />
			<input type="submit" value="enviar" />
		</form>
	</body>
</html>

 

Share this post


Link to post
Share on other sites

Disponível ;)

 

E sim, existe sim! O SQL tem funções de verificação também, porém acho até mais fácil por PHP rsrsrs

Share this post


Link to post
Share on other sites
14 horas atrás, Cleudiney T Brandão disse:

porém quando ele vém de um POST e não está preenchido o mysql o assume como 0 e avisa que o campo é duplicado.

Se o comando INSERT tiver nulo fica nulo no Banco !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By DuduBacteria
      Tenho uma Tabela chamada "VENDAS" com os seguintes atributos:
       
       
      Eu quero retornar em MySQL o total de vendas ocorridos durante 1 semana, entre o dia atual até seis dias atrás.
       
      Ficando mais ou menos assim:
       
      SEMANA              TOTAL DE VENDIDO segunda                250.00 domingo                430.00 sábado                 160.50 sexta                  300.03 quinta                 300.03 quarta                 300.03 terça                  300.03
    • By Kefatif
      Prezados, boa tarde.
       
      Estou com uma dúvida:
       
      Estou precisando trazer dados do banco para uma tela de edição de cadastro, até aí tudo bem consegui fazer para os input através do código abaixo:
       
      <label style="width:16%;margin-left: 2%;">Data de Início<br> <input type="date" value="<?php echo $row["DATA_DISPENSACAO"] ?>" class="form-control" style="width:100%;"> </label>  
      Mas o meu select já traz o controle de peso do banco, eu gostaria que além dele trazer esses pesos que traga o salvo no cadastro de uma pessoa para visualização e edição.
       
      Segue abaixo o código do select como está:
       
      <label style="width:15%">Peso<b style="color:red">*</b><br> <select name="peso" class="form-control" required style="width:100%" value="<?php echo $row["DATA_TESTE"] ?>"> <option value="">Selecione</option> <?php $sqlpeso = "select distinct PESO from TESTE where ID_ESQUEMA = ".$row["ID_ESQUEMA"]; $resultpeso = mysqli_query($con, $sqlpeso); while ($rowpeso= mysqli_fetch_array($resultpeso)){ ?> <option value="<?php echo utf8_encode($rowpeso["PESO"]);?>" ><?php echo utf8_encode($rowpeso["PESO"]); ?></option> <?php } ?> </select> </label>  
      Meu banco é MYSQL.
       
      Agradeço desde já a todos pela ajuda.
       
      Abraço!
    • By adriano.eurich
      Estou com duvida de como é montada uma query de um formulário com muitos campos em php!
      Ex. Tenho um formulário com titulo dados do cliente, nele tem vários campos para ser preenchidos, depois tem outro titulo que é dados do anuncio, que também tem vários campos a ser preenchido e mais alguns!
      Todos esses campos estão dentro de um único formulário que gostaria de enviar ao banco! Porem percebi que a query fica enorme e confusa de montar até mesmo para achar um erro!
      Acho que essa não é a melhor forma de fazer! 
      Gostaria de alguma dica ou esclarecimento de como fazer da melhor forma!
       
      Att
      Adriano
       
    • By Kefatif
      Prezados, boa tarde.
       
      Gostaria de ajuda para caso o valor no banco mysql, campo "fase" seja igual a "2" retorne uma mensagem, caso contrário siga o código
       
      Fico agradecido desde já.
       
      Abs.
    • By andreygsantos
      Pessoal, normalmente faço modelagem de banco de dados usando o CA ErWin, mas precisei utilizar a ferramenta de modelagem do MySQL Workbench 8.0 Community.
      O problema ocorre quando a ferramenta começa a "enfeitar o pavão" quando se trata de FK. Vou mostrar um exemplo básico:

      Temos aqui 3 tabelas representando condomínio, unidades e vagas. As vagas pertencem ao condomínio, assim como as unidades. As vagas podem pertencer a unidades diferentes no decorrer do tempo porque não são vagas fixas, portanto não posso pendurar vaga na unidade.
      Problema 1: FK recebe o nome da tabela origem automaticamente.
      Até aqui posso renomear o atributo ou alterar as configurações de modelagem.
       

      Atributos renomeados, temos o seguinte modelo representado acima. Agora vamos levar a PK da entidade UNIDADE para ser FK não identificação na entidade VAGA.
       

      E agora temos o Problema 2: a ferramenta não entende que o atributo CondomínioID já existe e cria novamente com o prefixo da entidade origem. Parece um problema besta e fácil de resolver apagando o atributo duplicado e mantendo apenas UnidadeID, mas ao sincronizar com o banco de dados, começam a surgir erros com índices.
      Abaixo mostro como fica a modelagem no ERWin sem qualquer interferência:
       

      Como podem ver, a modelagem fica perfeita. O ErWin entende que o atributo já existe na entidade e leva apenas o atributo que vai diferenciar para fazer o relacionamento.
       
      Vocês devem estar se perguntando por que eu não uso o ErWin então... Mas a versão do ErWin que tenho não suporta MySQL após a versão 5.x e uma licença nova dessa ferramenta vai me custar 1 rim, senão os 2... Teoricamente, o Workbench deveria fazer essa modelagem sem problemas, mas eu não conheço bem e talvez possa ser alguma configuração. Alguém teria uma luz?
      Obrigado.
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.