Php MySQL插入:避免使用多列重复
我基本上想在表t1的列(Php MySQL插入:避免使用多列重复,php,mysql,Php,Mysql,我基本上想在表t1的列(cls,jg)中插入两个值('Val',1)。 虽然cls设置为唯一,但jg必须使用相同的值多次出现,因此插入忽略将不起作用。在此之前,我必须检查该对('Val',1)是否已经存在,如果不存在,我必须插入这些值 我这样试过: INSERT INTO t1 (`cls`,`jg`) SELECT 'Val',1 FROM cls WHERE NOT EXISTS( SELECT 1 FROM cls WHERE `cls`='Val' AND `jg`=1) LIM
cls
,jg
)中插入两个值('Val',1)。
虽然cls
设置为唯一,但jg必须使用相同的值多次出现,因此插入忽略将不起作用。在此之前,我必须检查该对('Val',1)是否已经存在,如果不存在,我必须插入这些值
我这样试过:
INSERT INTO t1 (`cls`,`jg`)
SELECT 'Val',1 FROM cls WHERE NOT EXISTS(
SELECT 1 FROM cls WHERE `cls`='Val' AND `jg`=1)
LIMIT 1;
但当表为空时,它不起作用,因为此时外部select语句不包含任何条目
我应该如何进行?我不知道如何以不同的方式处理这个问题……在cls、jg上使用唯一的综合指数
ALTER IGNORE TABLE t1 ADD UNIQUE INDEX(cls(200), jg)
然后使用
INSERT.. ON DUPLICATE KEY UPDATE
你错了。如果在
cls
上有一个唯一的约束(如主键),它不会以任何方式干扰jg
的值
但我不想检查
cls
的值是否已经存在,我想同时检查cls
和jg
。例如,如果我在表格中有一个条目('XYZ',1),插入('Value',1)是正确的,但是当里面已经有('Value',1)时,就不会了。哦,我当时看错了问题@Mihai是正确的,在这两个字段上都做一个复合索引,然后进行一个普通的插入忽略。这给了我BLOB/TEXT列'cls',在键规范中使用,没有键长度
;可能是因为cls本身已经是唯一的?我不确定,尝试删除cls上的约束。