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 Keber_Crato
      Boa noite galera!!  estou com dificuldades em conseguir o somatório de de dois campos de uma tabela e o somatório de um campo de outra tabela,
      segue assim:
      Tenho uma tabela chamada CID_TITULAR  e outra CID_COMPOSICAO. a tabela CID_TITULAR recebe os cadastro de um programa social e a tabela CID_COMPOSICAO o cadastros dos dependentes (filhos, parentes) TITULAR_COD = COMPOSICAO_COD_TITULAR (chave de ligação)
      tenho dois campos na CID_TITULAR de valores, são eles: TITULAR_RENDA e TITULAR_RENDA_MENSAL e na outra tabela CID_COMPOSICAO tenho um campo de valor COMPOSICAO_RENDA
      estão povoado assim:
       
      Na tabela CID_TITULAR nos campos TITULAR_RENDA (R$ 10.00) e TITULAR_RENDA_MENSAL (R$ 10.00) e na tabela CID_COMPOSICAO no campo COMPOSICAO_RENDA tenho 3 registros com os valores R$ 300.00, R$ 200.00 e R$ 100.00
      GOSTARIA QUE A SELEÇÃO FOSSE O VALOR DOS DOIS CAMPOS DA TABELA CID_TITULAR + O CAMPO DA OUTRA TABELA CID_COMPOSICAO
       
      NO CASO O SOMATÓRIO CORRETO SERIA R$ 620,00
      10,00 no campo TITULAR_RENDA
      10,00 no campo TITULAR_RENDA_MENSAL
      300,00 NO 1º REGISTRO no campo COMPOSICAO_RENDA
      200,00 NO 2º REGISTRO no campo COMPOSICAO_RENDA
      100,00 NO 3º REGISTRO no campo COMPOSICAO_RENDA
       
      TOTALIZANDO R$ 620,00
      O PROBLEMA É:
      Quando faço a seleção com inner join a resposta é R$ 660,00 e não 620,00. a seleção triplica o valor da primeira tabela devido ter três registros na tabela CID_COMPOSICAO
       
      TABELA CID_TITULAR
      CREATE TABLE `cid_titular` (
        `titular_cod` int(11) NOT NULL AUTO_INCREMENT,
        `titular_renda` float(10,2) DEFAULT NULL,
        `titular_renda_mensal` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`titular_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
      TABELA CID_COMPOSICAO
      CREATE TABLE `cid_composicao` (
        `composicao_cod` int(11) NOT NULL AUTO_INCREMENT,
        `composicao_cod_titular` int(11) DEFAULT NULL,
        `composicao_renda` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`composicao_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
       
      GOSTARIA MUITO DE AJUDA GALERA. OBRIGADO!!!!
       

    • By Luciano Marques
      Então pessoal é o seguinte: Estou tendo problemas para impedir acesso simultâneo no meu projeto. Foi depois de muito pesquisar que vim aqui abrir esse tópico. 
      Enfim, eu até consegui colocar uma teoria em prática que era a de criar uma coluna na tabela `usuarios` com 1 para ativo, e 2 para  inativo. e depois coloquei no topo a condição IF para se 1 já preenchido não permite o login. até ai de boa. o problema vem se o usuário não desloga só fecha a janela. a coluna ainda permanece como ativa 1. mesmo expirando o login, não ocorre o update na base de dados. Se alguém puder me ajudar nessa, preciso concluir esse trabalho ainda essa semana. desde já agradeço 
    • By drx
      Olá Pessoal!
       
      Eu estou tentando instalar o sgbd navicat para acessar meu banco de dados, porém sem sucesso. 
      Pergunta: Para usar o sgbd navicat é necessário instalar o mysqlserver  ou o navicat já traz no pacote dele ao instalar?
      Aguardo.
       
    • By renzogr
      Olá Masters
       
      Estou precisando incluir uma string num campo de uma tabela mysql.
      É o seguinte:
      Tenho um campo contendo instruções de uma receita culinária e preciso colocar a string "-- " (sem aspas) no início de cada linha do campo das instruções.
      Já tentei o 
      UPDATE tabela SET variavel = concat("-- ", variavel); mas ele só altera a primeira linha...  Preciso encontrar as demais linhas dentro do campo e colocar a string na frente.
       
      Alguém tem uma ideia de como fazer ?
       
    • By mayko@123
      TENHO O SEGUINTE SELECT :   select loja,NOME,PREÇO from produtos  GROUP BY NOME,LOJA order by NOME,PREÇO ASC ;
      E O RETORNO É : 
       
      LOJA             NOME                            PREÇO
      A banana prata 1,98 C                  banana prata 1,99 B          COCO VERDE 1 123   COCO VERDE 1 C  COCO VERDE 1 C   laranja pera rio 0,49 A       laranja pera rio 1,99 123 laranja pera rio 1211 B LARANJA SERRA DAGUA 1,99 C LARANJA SERRA DAGUA 2,99 B maca fuji 2,50 C maca fuji 2,97 A maca fuji 2,99 B MAMAO 1,97 C MAMAO 2,10 123 PESSEGO 12 C PESSEGO 2,30 A PESSEGO 234 C UVA 1212 123 UVA 212 A UVA 3,25  
      QUERIA QUE ME RETORNASSE APENAS O PRIMEIRO PRODUTO,PREÇO DE CADA LOJA POR EXEMPLO : A LOJA 'A'  VENDEU A BANANA MAIS BARATA, A LOJA 'B' VENDEU O COCO VERDE MAIS BARATO A LOJA 'C' A LARANJA..... e assim por diante , senão o retorno vai ficar muito extenso pois vai ser muitas lojas e produtos.
×

Important Information

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