SQL - 如果它是一个空字符串(''),如何忽略重复数据的插入(UNIQUE)?

时间:2012-11-14 17:06:57

标签: mysql duplicates unique string

我的桌子cadastro:

cod_bolsa VARCHAR(7) PRIMARY KEY
nome VARCHAR(70) NOT NULL
endereco VARCHAR(100) NOT NULL
email VARCHAR(50) NOT NULL
telefone VARCHAR(13) NOT NULL
celular VARCHAR(14) NOT NULL
cpf VARCHAR(14) UNIQUE
cnpj VARCHAR(18) UNIQUE
rg VARCHAR(12) UNIQUE
datanasc VARCHAR(12) NOT NULL

查询:

INSERT INTO cadastro VALUES(
'000036',
'JULIO CESAR',
'AV. FRANZ VOEGELI, 300 - VILA YARA, SÃO PAULO/SP',
'julio.c@mail.com',
'(11)2345-6789',
'(11)99876-5432',
'987.654.321.00',
'',
'98.765.432-1',
'1972-5-12'
);


INSERT INTO cadastro VALUES(
'000125',
'JOAO MARIA',
'AV. FRANZ VOEGELI, 300 - VILA YARA, SÃO PAULO/SP',
'joao.m@mail.com',
'(11)2345-6789',
'(11)91676-1334',
'012.234.567-89',
'',
'01.234.345-8',
'1991-1-20'
);

MySQL显然说

ERROR 1062 (23000): Duplicate entry '' for key 'cnpj'

如何避免?

2 个答案:

答案 0 :(得分:1)

“解决”这个问题最明显的方法当然是使该领域不具有独特性。

但是,也许,你希望得到类似“如果违反了唯一约束,用其他东西更新以前的条目”。

在这种情况下,您可能希望使用“ON DUPLICATE KEY UPDATE”或“REPLACE INTO”,它们是both explained here

答案 1 :(得分:0)

你的表在[cnpj VARCHAR(18)]上有一个UNIQUE约束; UNIQUE约束保证了cnpj列的唯一性,因此您不能插入2个具有相同cnpj值的记录。