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 guzulino
      Então... eu preciso inserir uma paulada de dados em um banco de dados de vez em quando, eu até consigo importar de um CSV pro banco, mas eu preciso fazer isso através do php e eu não tenho nem ideia de como fazer isso, procurei por aqui e não achei, se alguém tem alguma resposta ou referência, manda o link que eu vou dar uma olhada. Valeu.
    • By DouglasVitor
      Boa tarde,
      Estou a pelo menos 3 semanas tentando instalar o MySQL Server no Windows 10 Pro, mas sem sucesso.
      Baixo o instalador mas no momento de obstar o MySQL Server, apresenta uma mensagem de falha. Tentei a versão mais nova e antiga, mas a falha e a mesma. Alguém poderia me ajudar com este problema? É necessário alguma configuração no Windows?
      Desde já agradeço.
    • By Dani_Ambrosio
      Preciso criar uma coluna em uma tabela já existente, porém os dados dessa nova coluna vão depender de outra tabela
      Ex:
      tenho a tabela faturamento e nela eu preciso criar uma nova coluna que vai chamar fat_removido e os dados dessa coluna vão depender de uma outra tabela que se chama Faturamento removido.
      tanto as tabelas faturamento e a faturamento removido tem o ID_faturamento, quando o mesmo constar nas duas tabelas a nova coluna deverá ser preenchida com Sim e quando não constar deve ser preenchida com Não 
      Como faço isso?
    • By Bruno - BuhDesign
      Bom dia pessoal.
      Bom, estou trabalhando no banco de dados MySQL de um cliente, onde ele salva o curso da seguinte forma:
       
      NOME DO CURSO || LONDRINA - PR
      NOME DO CURSO || CURITIBA - PR
       
      Eu preciso fazer uma contagem, por curso, independente da cidade. Ou seja, se eu fizer um GROUP BY ele não
      vai juntar LONDRINA e CURITIBA. Como posso contornar esta divergência?  Teria uma forma de agrupar, até encontrar
      o carácter || ou agrupar por "semelhantes"?
      De fato, LONDRINA e CURITIBA possuem o mesmo curso e precisavam aparecer na mesma contagem. 
      Muito obrigado desde já.
    • By JenneferBarbosa
      Pessoal, sou nova aqui no Fórum e estou começando a estudar PHP. Estou com dúvidas quanto a pesquisa com vários campos, consegui fazer para um campo só, porém quando tento para vários campos não funciona. Fiz algumas pesquisas e só consegui achar buscas com 'selects e options' e eu queria que ele pegasse o que foi digitado no input e fizesse a busca, mas o usuário não precisaria informar todos os campos (se não quisesse). Quando clico em 'Pesquisar' aparece todos os dados do banco. E uma outra dúvida, como faz para que os dados pesquisados sejam exibidos na mesma tela (abaixo do formulário de pesquisa)
      <form method="POST" id="form-pesquisa" action="busca.php"> Livro: <input type="text" name="nome" id="nome" placeholder="Fulano de Tal"> Autor: <input type="text" name="autor" id="autor" placeholder="Fulano de Tal"> Edicao: <input type="text" name="edicao" id="edicao" placeholder="Fulano de Tal"> <input type="submit" name="enviar" value="Pesquisar"> </form> <ul class="resultado"></ul> $nome = $_POST['nome']; $autor = $_POST['autor']; $edicao = $_POST['edicao']; //Pesquisar no banco de dados nome do livro referente a palavra digitada pelo usuário $livros = "SELECT * FROM livro WHERE nome OR autor OR edicao ORDER BY nome ASC"; $resultado_livros = mysqli_query($conn, $livros); if (mysqli_num_rows($resultado_livros) <= 0) { echo "Nenhum livro encontrado..."; } else { while ($rows = mysqli_fetch_assoc($resultado_livros)) { echo "<li>" . $rows['codigo'] . "</li>"; echo "<li>" . $rows['nome'] . "</li>"; echo "<li>" . $rows['autor'] . "</li>"; echo "<li>" . $rows['edicao'] . "</li>"; } } . Como se ele fizesse a busca internamente e mostrasse ao usuário o que ele pesquisou sem ele sair da tela em que está o form
×

Important Information

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