唯一约束,如何避免重复

sil*_*min 1 php mysql

根据我之前的查询帖子我有一个看起来像这样的表:

|| *nid* || *language* ||
|| 8 || Chinese ||
|| 8 || Portuguese ||
|| 8 || German |
Run Code Online (Sandbox Code Playgroud)

其中'nid'和'language'具有唯一约束.

使用此设置,当我尝试插入新行时,如何确保那里不会有任何重复?

EDITED

我猜我应该尝试进行如下查询:

SELECT * FROM lang WHERE nid = $nid AND language = $lang
Run Code Online (Sandbox Code Playgroud)

如果这返回FALSE,那么我知道我现在可以插入我的数据.它是否正确 ?

Arn*_*anc 5

通过创建唯一键来强制执行唯一约束:

ALTER TABLE the_table
ADD UNIQUE INDEX nid_language_unique (nid, language);
Run Code Online (Sandbox Code Playgroud)

此约束禁止两行具有相同的nid和语言.

任何试图违反约束的查询都将失败.

由于您要忽略错误(并且仍然中止查询),您可以使用INSERT IGNOREUPDATE IGNORE:

INSERT IGNORE INTO the_table (nid, language) VALUES (8, 'Chinese')
/* row not inserted and no error */
Run Code Online (Sandbox Code Playgroud)